1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Bitnugger

Beiträge von Bitnugger

  • String von nicht Zahlen säubern und formartieren

    • Bitnugger
    • 13. März 2019 um 19:21
    Zitat von ruby

    vielen Dank, da wird einem ja ganz schwindelig bei den vielen ?m)^\s+(\d+)....

    Ja, solche Pattern sind alles andere, aber definitiv nicht augenfreundlich... das ist aber immer so, wenn man eine "Sprache" nicht versteht.

    PS: Ich habe obiges Script noch mal ein wenig geändert!

  • BitShift (unsigned INT)

    • Bitnugger
    • 13. März 2019 um 15:13
    Zitat von Mars

    Ich bin ein wenig verwirrt, die BitShift Funktion in AutoIt tut genau das was man vermuten würde oder?

    Er meint sicher Zahlen, die mit INT nicht mehr darstellbar sind... das Thema hatten wir vor kurzem... im Anhang ist die UDF, die ich dafür benutze.

    _BitShift64(), _BinaryShift()

    PS: Dies ist eine leicht geänderte Version der UDF, die von @Ward stammt.

    Code
    ; =============================================================================
    ;  AutoIt Binary UDF (2011.9.15)
    ;  Purpose: Functions About Binary Type Variable Management
    ;  Author: Ward
    ;  Modified by: Bitnugger
    ;  1. Unused variables commented out
    ;     _BinaryReplace(): $BinaryLen, $SearchLen, $ReplaceLen
    ;     _BinaryRandom(): $Ret
    ;  2. Number of parameters changed for _BitXOR64(), _BitAND64() and _BitOR64()
    ;     From 20 to 255
    ;  3. Change the Code in _BinaryAnd, _BinaryOR, _BinaryXOR, _BinaryNot,
    ;     _BinaryShift, _BinaryRotate, _BinaryReverse, _BinaryInBin, _BinaryReplace,
    ;    _BinaryRandom
    ;    From:
    ;      Static $CodeBufferPtr
    ;      If Not $CodeBufferPtr Then
    ;          Local $Code
    ;          If @AutoItX64 Then
    ;              $Code = Binary("0x...")
    ;          Else
    ;              $Code = Binary("0x...")
    ;          EndIf
    ;          $CodeBufferPtr = __BinaryCodeBufferAlloc($Code)
    ;      EndIf
    ;    To:
    ;      Local Static $aCode = ["0x...(X86)", "0x...(X64)"], _
    ;          $CodeBufferPtr = __BinaryCodeBufferAlloc($aCode[@AutoItX64])
    ; =============================================================================
    Alles anzeigen

    Dateien

    Binary.au3 43,07 kB – 447 Downloads
  • String von nicht Zahlen säubern und formartieren

    • Bitnugger
    • 13. März 2019 um 15:00
    Zitat von ruby

    lösche die letzte leere Zeile mit StringStripWS($sResult, 1+2)

    In dem Bsp. von BugFix wird durch das ConsoleWrite ein zusätzliches @CRLF ausgegeben und da der String selbst auch mit einem @CRLF endet, hast du eines zu viel...

    Hier wieder als Einzeiler. ;)

    Code
    ; Diese Pattern funktioniert auch, wenn Zeilen mit Leerzeichen|Tabs beginnen und es ist auch egal, ob die letzte Zeile mit oder ohne @CR|@LF|@CRLF endet.
    Local $sResult = StringRegExpReplace($s, '(?m)(?:^\s+)?(\d+)\s+(\d+)\s+(\d+)(?:.*\R)?', '\1 \2 \3' & @CRLF)
    ConsoleWrite($sResult)
    
    ; Wenn du das @CRLF der letzten Zeile noch weg haben willst...
    Local $sResult = StringStripWS(StringRegExpReplace($s, '(?m)(?:^\s+)?(\d+)\s+(\d+)\s+(\d+)(?:.*\R)?', '\1 \2 \3' & @CRLF), 2)
    ConsoleWrite($sResult)
  • AutoIt Windows Screenshooter v1.84 Build 2019-08-18

    • Bitnugger
    • 12. März 2019 um 13:28

    Mit "Grab Screen", "Screenshot a Web Site" liefert bei mir nur ein komplett schwarzes Bild... habe mehrere Seiten versucht.

  • AutoIt Windows Screenshooter v1.84 Build 2019-08-18

    • Bitnugger
    • 12. März 2019 um 07:46
    Zitat von Tweaky

    Also muss es an 1809 liegen.

    Bei mir funktioniert es mit der 1809... linkes Bild ist mit Windows Screenshooter gemacht...

    1809.png  Win_10_1809.png

    ...bekomme allerdings einen Fehler, wenn ich die Taste "druck" benutze, die bei mir von SnagIt belegt ist.

  • Mail Client MIT Downloadverwaltung?

    • Bitnugger
    • 12. März 2019 um 07:28
    Zitat von BugFix

    finde ich nur den Link zum lokalen Speicherplatz des Desktop-PC

    Netztwerk-Ordner/NAS/Mapped Drive/OneDrive/FRITZ!NAS kannst du nicht als Pfad angeben?

  • Mail Client MIT Downloadverwaltung?

    • Bitnugger
    • 11. März 2019 um 02:33

    Ja, das ist wirklich erbärmlich... gefunden habe ich zu diesem Thema diesen Link: https://www.mailhilfe.de/downloads/micr…tung-in-outlook

  • Webbrowser mit Tabs

    • Bitnugger
    • 9. März 2019 um 17:18

    Ich habe dein Script mal ein wenig umgestrickt und damit gespielt... doch auf halben Wege hat mich dann die Lust verlassen, weil das Ganze irgendwie keinen Sinn für mich macht... wollte dir das Ergebnis aber nicht vorenthalten.

    Eine mit _IECreateEmbedded() erzeugte Instanz kann nur entsorgt werden, wenn die GUI, in der sie erstellt wurde, gelöscht wird. Demzufolge müsste man die Instanzen jeweils in einer eigenen (Child-)GUI starten und diese GUi dann löschen, um die Instanz restlos entsorgen zu können, wenn ein Tab geschlossen wird.

    PS: Microsoft rät zudem ausdrücklich an, den IE wegen diverser Sicherheitslücken nicht mehr zu benutzen - somit gilt dies auch für die _IE.au3.

    C
    ;~ Opt('MustDeclareVars', 1)
    
    #cs ----------------------------------------------------------------------------
    
        Author: Pad
        Version: beta
        Kommentare: new tabs...
    
    #ce ----------------------------------------------------------------------------
    
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <IE.au3>
    #include <GuiTab.au3>
    
    Global $g_iTabsCount = 0, $g_iCurrentTabIndex = -1
    Global $g_sTabsDefTitle = "Tab"
    
    Global Enum $e_iTabItemIndex, $e_oIE, $e_idBrowser, $e_StartURL, $e_sCurrentHTML, $e_aHistory, $e_idInp_Eingabe, $e_idBtn_Home, $e_SizeOff
    Global $g_aTabs[0][$e_SizeOff]
    
    Global $g_iUpdateInterval = 10000
    
    Global $g_hGUI, $g_idTab, $g_idBtn_CloseTab, $g_idBtn_NewTab, $g_idBtn_CloseAllTabs
    
    _Main()
    
    Func _Main()
        $g_hGUI = GUICreate("Webbrowser", 1500, 800, 200, 125)
        GUICtrlSetFont(-1, 11, 800, 0, "Palatino Linotype")
    
        HotKeySet("{LEFT}", "_back")
        HotKeySet("{RIGHT}", "_forward")
        HotKeySet("{DOWN}", "_refresh")
    
        $g_idBtn_CloseTab = GUICtrlCreateButton("Close current Tab", 18, 750, 110, 25)
        $g_idBtn_NewTab = GUICtrlCreateButton("New Tab", 18 + 110, 750, 110, 25)
        $g_idBtn_CloseAllTabs = GUICtrlCreateButton("Close all Tabs", 18 + 220, 750, 110, 25)
    
        $g_idTab = GUICtrlCreateTab(15, 5, 1473, 685)
    
        GUISetState(@SW_SHOW)
    
        Local $aURL = ["start.duckduckgo.com", "www.google.de", "autoit.de", "www.autoitscript.com"]
        For $i = 0 To 3 Step 1
            _NewTab($aURL[$i])
        Next
    
        $g_iCurrentTabIndex = 3
        _GUICtrlTab_ActivateTab($g_idTab, $g_iCurrentTabIndex) ; Tab 3 aktivieren
    
        AdlibRegister("_update", 250)
    
        Local $nMsg
        While 1
            $nMsg = GUIGetMsg()
            Switch $nMsg
                Case $GUI_EVENT_CLOSE
                    Exit
                Case _GetID($g_iCurrentTabIndex, $e_idInp_Eingabe)
                    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $nMsg --> " & $nMsg & @CRLF)
                    _IENavigate($g_aTabs[$g_iCurrentTabIndex][$e_oIE], GUICtrlRead($g_aTabs[$g_iCurrentTabIndex][$e_idInp_Eingabe]))
                    $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML] = _IEPropertyGet($g_aTabs[$g_iCurrentTabIndex][$e_oIE], "locationurl")
                    GUICtrlSetData($g_aTabs[$g_iCurrentTabIndex][$e_idInp_Eingabe], $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML])
                Case _GetID($g_iCurrentTabIndex, $e_idBtn_Home)
                    _IENavigate($g_aTabs[$g_iCurrentTabIndex][$e_oIE], $g_aTabs[$g_iCurrentTabIndex][$e_StartURL])
                    $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML] = _IEPropertyGet($g_aTabs[$g_iCurrentTabIndex][$e_oIE], "locationurl")
                    GUICtrlSetData($g_aTabs[$g_iCurrentTabIndex][$e_idInp_Eingabe], $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML])
                Case $g_idBtn_CloseTab
                    _CloseTab()
                Case $g_idBtn_NewTab
                    _NewTab()
                Case $g_idBtn_CloseAllTabs
                    _CloseAllTabs()
            EndSwitch
        WEnd
    EndFunc  ;==>_Main
    
    Func _GetID($iIndex, $ID)
        Return $g_iTabsCount > $iIndex And $iIndex > -1 ? $g_aTabs[$iIndex][$ID] : -1
    EndFunc  ;==>_GetID
    
    Func _back()
        ConsoleWrite('_back()' & @CRLF)
        If $g_iTabsCount > $g_iCurrentTabIndex Then
            Local $aHistory = $g_aTabs[$g_iCurrentTabIndex][$e_aHistory]
            ConsoleWrite("@@ _back()    : $aHistory[" & 0 & "] --> " & $aHistory[0] & '/' & UBound($aHistory) -1 & @CRLF)
            If $aHistory[0] > 1 Then
                $aHistory[0] -= 1
                $g_aTabs[$g_iCurrentTabIndex][$e_aHistory] = $aHistory
                _IEAction($g_aTabs[$g_iCurrentTabIndex][$e_oIE], "back")
                If @error Then _IENavigate($g_aTabs[$g_iCurrentTabIndex][$e_oIE], $g_aTabs[$g_iCurrentTabIndex][$e_StartURL])
                $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML] = _IEPropertyGet($g_aTabs[$g_iCurrentTabIndex][$e_oIE], "locationurl")
                GUICtrlSetData($g_aTabs[$g_iCurrentTabIndex][$e_idInp_Eingabe], $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML])
            EndIf
        EndIf
    EndFunc  ;==>_back
    
    Func _forward()
        ConsoleWrite('_forward()' & @CRLF)
        If $g_iTabsCount > $g_iCurrentTabIndex Then
            Local $aHistory = $g_aTabs[$g_iCurrentTabIndex][$e_aHistory]
            ConsoleWrite("@@ _forward() : $aHistory[" & 0 & "] --> " & $aHistory[0] & '/' & UBound($aHistory) -1 & @CRLF)
            If UBound($aHistory) > 1 And $aHistory[0] < UBound($aHistory) -1 Then
                $aHistory[0] += 1
                $g_aTabs[$g_iCurrentTabIndex][$e_aHistory] = $aHistory
                _IEAction($g_aTabs[$g_iCurrentTabIndex][$e_oIE], "forward")
                If @error Then _IENavigate($g_aTabs[$g_iCurrentTabIndex][$e_oIE], $g_aTabs[$g_iCurrentTabIndex][$e_StartURL])
                $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML] = _IEPropertyGet($g_aTabs[$g_iCurrentTabIndex][$e_oIE], "locationurl")
                GUICtrlSetData($g_aTabs[$g_iCurrentTabIndex][$e_idInp_Eingabe], $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML])
            EndIf
        EndIf
    EndFunc  ;==>_forward
    
    Func _refresh()
        ConsoleWrite('_refresh()' & @CRLF)
        If $g_iTabsCount > $g_iCurrentTabIndex Then
            _IEAction($g_aTabs[$g_iCurrentTabIndex][$e_oIE], "refresh")
            $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML] = _IEPropertyGet($g_aTabs[$g_iCurrentTabIndex][$e_oIE], "locationurl")
            GUICtrlSetData($g_aTabs[$g_iCurrentTabIndex][$e_idInp_Eingabe], $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML])
            ; CurrentHTML in History eintragen, falls noch nicht vorhanden.
            If _ArraySearch($aHistory, $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML], 1) = -1 Then
                $aHistory[0] = _ArrayAdd($aHistory, $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML])
                $g_aTabs[$g_iCurrentTabIndex][$e_aHistory] = $aHistory
            EndIf
        EndIf
    EndFunc  ;==>_refresh
    
    Func _update()
        If $g_iTabsCount > $g_iCurrentTabIndex Then
            Local $aHistory = $g_aTabs[$g_iCurrentTabIndex][$e_aHistory]
            $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML] = _IEPropertyGet($g_aTabs[$g_iCurrentTabIndex][$e_oIE], "locationurl")
            GUICtrlSetData($g_aTabs[$g_iCurrentTabIndex][$e_idInp_Eingabe], $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML])
            ; CurrentHTML in History eintragen, falls noch nicht vorhanden.
            If _ArraySearch($aHistory, $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML], 1) = -1 Then
                $aHistory[0] = _ArrayAdd($aHistory, $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML])
                $g_aTabs[$g_iCurrentTabIndex][$e_aHistory] = $aHistory
            EndIf
        EndIf
    EndFunc  ;==>_update
    
    Func _NewTab($sURL = "start.duckduckgo.com")
        $g_iCurrentTabIndex = _ArrayAdd($g_aTabs, '')
        $g_iTabsCount += 1
        $g_aTabs[$g_iCurrentTabIndex][$e_iTabItemIndex] = _GUICtrlTab_InsertItem($g_idTab, $g_iCurrentTabIndex, "Tab " & $g_iTabsCount) ; $iTabItemIndex
        _GUICtrlTab_ActivateTab($g_idTab, $g_iCurrentTabIndex)
    
        $g_aTabs[$g_iCurrentTabIndex][$e_oIE] = _IECreateEmbedded() ; $oIE
        Local $aHistory = [0]
        $g_aTabs[$g_iCurrentTabIndex][$e_aHistory] = $aHistory
        $g_aTabs[$g_iCurrentTabIndex][$e_idBrowser] = GUICtrlCreateObj($g_aTabs[$g_iCurrentTabIndex][$e_oIE], 16, 60, 1468, 673) ; $idBrowser
        $g_aTabs[$g_iCurrentTabIndex][$e_StartURL] = $sURL ; $sURL
        _IENavigate($g_aTabs[$g_iCurrentTabIndex][$e_oIE], $g_aTabs[$g_iCurrentTabIndex][$e_StartURL])
        $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML] = _IEPropertyGet($g_aTabs[$g_iCurrentTabIndex][$e_oIE], "locationurl") ; $sCurrentHTML
    
        $g_aTabs[$g_iCurrentTabIndex][$e_idInp_Eingabe] = GUICtrlCreateInput("$idInp_Eingabe", 16, 30, 1390, 21) ; $idInp_Eingabe
        $g_aTabs[$g_iCurrentTabIndex][$e_idBtn_Home] = GUICtrlCreateButton("Startseite", 1408, 28, 75, 25) ; $idBtn_Home
    
        GUICtrlSetData($g_aTabs[$g_iCurrentTabIndex][$e_idInp_Eingabe], $g_aTabs[$g_iCurrentTabIndex][$e_sCurrentHTML])
    EndFunc  ;==>_NewTab
    
    Func _CloseTab()
        If $g_iTabsCount Then
            GUICtrlDelete($g_aTabs[$g_iCurrentTabIndex][$e_idBrowser])
            _GUICtrlTab_DeleteItem($g_idTab, $g_iCurrentTabIndex)
            _ArrayDelete($g_aTabs, $g_iCurrentTabIndex)
            $g_iCurrentTabIndex -= 1
            $g_iTabsCount -= 1
            _GUICtrlTab_ActivateTab($g_idTab, $g_iCurrentTabIndex)
        EndIf
    EndFunc  ;==>_CloseTab
    
    Func _CloseAllTabs()
        For $i = 0 To $g_iTabsCount - 1 Step 1
            GUICtrlDelete($g_aTabs[$i][$e_idBrowser])
        Next
        _GUICtrlTab_DeleteAllItems($g_idTab)
        ReDim $g_aTabs[0][$e_SizeOff]
        $g_iTabsCount = 0
        $g_iCurrentTabIndex = -1
    EndFunc  ;==>_CloseAllTabs
    Alles anzeigen
  • Tipp zum Setzen von Übergabeparametern ($CMDLINE) im SciTE-Editor

    • Bitnugger
    • 7. März 2019 um 02:46
    Zitat von Musashi

    $CMDLine selbst erlaubt 63 Parameter

    Hier noch ein Tip aus der Autoit-Hilfe, falls mehr als 63 Parameter benötigt werden...

    C
    ; Using AutoIt -> Command Line Parameters
    
    ; Note: A maximum of 63 parameters can be returned by the array $CmdLine[]. If you would like to see the entire commandline string passed to an AutoIt executable, then use $CmdLineRaw for the entire parameter string.
    
    #include <Array.au3>
    #include <WinAPIShPath.au3>
    
    ; An alternative to the limitation of $CmdLine[] only being able to return a maximum of 63 parameters.
    Local $aCmdLine = _WinAPI_CommandLineToArgv($CmdLineRaw)
    _ArrayDisplay($aCmdLine)
  • Merere Office Processe beenden

    • Bitnugger
    • 7. März 2019 um 02:32

    Mit ProcessClose() wird ein Prozess nicht beendet, sondern gekillt - nicht gespeicherte Daten gehen dabei verloren!

    Zitat von water

    _Excel_Open verbindet sich mit der laufenden Excel-Instanz, dann mit _Excel_Close beenden.

    _Excel_Open stellt eine Verbindung zu einer vorhandenen Excel-Instanz her oder erstellt eine neue.

    UDF's für Excel und Word werden bereits mit AutoIt ausgeliefert, die für Outlook und PowerPoint müsstest du dir dann wohl noch besorgen.

    https://www.autoitscript.com/forum/files/fi…powerpoint-udf/

    https://www.autoitscript.com/forum/topic/89321-outlook-udf/

    https://www.autoitscript.com/wiki/OutlookEX_UDF_-_General

    Eine Alternative (für Prozesse ohne COM-Schnittstelle) wäre:

    C: _ProcessClose.au3
    ;-- TIME_STAMP   2019-03-07 02:24:33   v 0.1
    
    Opt('MustDeclareVars', 1)
    
    #Region    ;************ Includes ************
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <WinAPIProc.au3>
    #EndRegion ;************ Includes ************
    
    _Example()
    
    Func _Example()
        Run('cmd.exe')
    ;~ Run('powershell.exe')
        Sleep(2000)
        _ProcessClose('cmd.exe', $WM_CLOSE) ; Window class = ConsoleWindowClass - geht nur mit $WM_CLOSE/ProcessClose()!
    ;~ _ProcessClose('powershell.exe') ; Window class = ConsoleWindowClass - geht nur mit $WM_CLOSE/ProcessClose()!
        Sleep(1000)
    
        Run('notepad.exe')
        WinWaitActive("Unbenannt - Editor")
        Send("$WM_QUIT wird an Notepad gesendet...")
        Sleep(2000)
        _ProcessClose('notepad.exe', $WM_QUIT)
        Sleep(1000)
    
        Run('notepad.exe')
        WinWaitActive("Unbenannt - Editor")
        Send("$WM_CLOSE wird an Notepad gesendet...")
        Sleep(2000)
        _ProcessClose('notepad.exe', $WM_CLOSE)
    EndFunc   ;==>_Example
    
    Func _ProcessGetWindows($vProcess, $bVisible = True) ; Name or PID
        Local $iPID = ProcessExists($vProcess)
        If Not $iPID Then Return False
    
        Local $aProcessWindows = _WinAPI_EnumProcessWindows($iPID, $bVisible) ; Window handle, Window class name
        If Not @error Then Return $aProcessWindows
    
        Local $x = 0, $aPID[0], $aResult, $aWindows[0][2], $aWinList = WinList() ; Window title, Window handle
        For $i = 1 To $aWinList[0][0]
            If WinGetProcess($aWinList[$i][1], "") = $iPID And $aWinList[$i][0] <> "" Then
                ReDim $aWindows[$x + 1][2]
                $aResult = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $aWinList[$i][1], "wstr", "", "int", 4096)
                $aWindows[$x][0] = $aWinList[$i][1] ; Window handle
                $aWindows[$x][1] = $aResult[2] ; Window class name
                $x += 1
            EndIf
        Next
        _ArrayInsert($aWindows, 0, $x)
        Return UBound($aWindows) ? $aWindows : False
    EndFunc   ;==>_ProcessGetWindows
    
    Func _ProcessClose($vProcess, $iMsg = '', $bVisible = True) ; $iMsg = '' or $WM_CLOSE or $WM_QUIT, $bVisible = True or False
        Local $aRes, $aProcessWindows = _ProcessGetWindows($vProcess, $bVisible)
        If Not UBound($aProcessWindows) Then
            Local $iPID = ProcessExists($vProcess)
            If $iPID Then ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   - $vProcess (" & _WinAPI_GetProcessName($iPID) & ") hat kein Window, geht nur mit ProcessClose()!" & @CRLF)
            Return $iPID ? ProcessClose($iPID) : False
        EndIf
    
        For $i = 1 To $aProcessWindows[0][0]
            If $aProcessWindows[$i][1] = 'ConsoleWindowClass' Or $iMsg = '' Then
                ProcessClose($vProcess)
            Else
                If $aProcessWindows[$i][1] = 'ConsoleWindowClass' And $iMsg = $WM_QUIT Then
                    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   - Window class = ConsoleWindowClass - mit $WM_QUIT wird nur das Fenster geschlossen, aber nicht der Prozess, mit $WM_CLOSE/ProcessClose() geht es aber!" & @CRLF)
    
                    ProcessClose($vProcess)
                    ; oder...
    ;~                 $aRes = DllCall("User32.dll", "int", "PostMessageA", "hwnd", $aProcessWindows[$i][0], "int", $WM_CLOSE, "int", 0, "int", 0)
    ;~                 ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $aRes --> " & _ArrayToString($aRes, ', ') & @CRLF)
                Else
                    $aRes = DllCall("User32.dll", "int", "PostMessageA", "hwnd", $aProcessWindows[$i][0], "int", $iMsg, "int", 0, "int", 0)
                    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $aRes --> " & _ArrayToString($aRes, ', ') & @CRLF)
                EndIf
            EndIf
        Next
        Return $i
    EndFunc   ;==>_ProcessClose
    Alles anzeigen
  • CmdLine Abfrage Werte Prüfen

    • Bitnugger
    • 6. März 2019 um 23:28
    Zitat von Musashi

    $aProperty = StringSplit($CMDLINE[$i], '=')

    Wieso nicht...

    $aProperty = StringSplit($CMDLINE[$i], '=', 2)

    ...wenn du den Counter eh nicht nutzt?

    Zitat von Musashi

    Case '/?'

    Dieses Case wird nie zutreffen!

    Zitat von Musashi

    $iTimeCmd = Number(StringRegExpReplace($aProperty[2], '(\d+)', '\1'))

    Wieso mit StringRegExpReplace? Reicht Number() nicht?

    $iTimeCmd = Number($aProperty[2])

  • Tipp zum Setzen von Übergabeparametern ($CMDLINE) im SciTE-Editor

    • Bitnugger
    • 6. März 2019 um 22:43
    Zitat von Musashi

    Die Beschränkung auf 4 Parameter ist etwas schade - ggf. können unsere LUA Experten wie

    BugFix und Bitnugger da was machen, sofern technisch möglich.

    Das ist nicht nötig, denn es können weit mehr Parameter übergeben werden, da du in jedem Eingabefeld mehrere angeben kannst. 8o

    Hier ein Bsp.:

    Code
    If $CMDLINE[0] Then
        For $i = 1 To $CMDLINE[0] Step 1
            ConsoleWrite('$CMDLINE['&$i&'] = ' & $CMDLINE[$i] & @CRLF)
        Next
    EndIf

    Ausgabe:

    $CMDLINE[1] = /t

    $CMDLINE[2] = 300

    $CMDLINE[3] = /s

    $CMDLINE[4] = 20

    $CMDLINE[5] = /I

    $CMDLINE[6] = --verbose

    $CMDLINE[7] = --usevars

    $CMDLINE[8] = /q

    $CMDLINE[9] = /r

    $CMDLINE[10] = /z

    $CMDLINE[11] = Heute ist Montag!

    $CMDLINE[12] = Ne,

    $CMDLINE[13] = Dienstag!

    PS: Die Gesamtlänge für die Parameterübergabe ist ab Win XP+ auf 8191 Zeichen begrenzt.

  • App bzw. Webseite ermitteln, welche generische Anmeldeinformationen hinterlegt

    • Bitnugger
    • 5. März 2019 um 22:20
    Zitat von autoBert

    Und in der derzeitigen Umgebung, mit der gelegentlich künstlichen Hektik, macht das Entfernen der Anmeldedaten jetzt noch mehr Sinn!

    Ich denke, wenn du bei der ersten Authentifizierung angibst, dass die Daten nicht gespeichert werden sollen (Haken rausnehmen), dann gibt es auch nichts sicherheitsrelevantes, was entfernt werden muss. Die angezeigten Sternchen beim Passwort in der Anmeldeinformationsverwaltung sind in dem Fall lediglich als Platzhalter zu verstehen.

  • Timer anzeigen lassen...

    • Bitnugger
    • 5. März 2019 um 22:04
    Zitat von Ram3000

    Kann ich die 'consolewrite' rausnehmen wenn ich es Builden will oder stört das dann nicht?

    Ja, kannst du... du kannst es aber auch so machen:

    If Not @Compiled Then ConsoleWrite('Dieser Text wird nur ausgegeben, wenn das Script nicht kompiliert ist!' & @CRLF)

    Eine Consolenausgabe im kompilierten Script hast du aber eh nur, wenn du es als CUI kompilierst... dazu wird folgende Direktive im Script gesetzt:

    #AutoIt3Wrapper_Change2CUI=y

    Zitat von Ram3000

    Die OK-Meldung sollte jedesmal ausgegeben werden, nur die DOWN-Meldung sollte nur beim DOWN 1x ausgegeben werden.

    Ja... eigentlich kein großes Ding, aber ich werde dir am WE besser ein komplett neues Script dafür schreiben... da hast du weitaus mehr von!

  • CmdLine Abfrage Werte Prüfen

    • Bitnugger
    • 5. März 2019 um 00:28

    Wenn du SciTe4AutoIt3 benutzt, gibt es dafür Abbrevs, die nach Eingabe eines Leerzeichens zu einem Code-Block expandiert werden.

    Du tippst z.B. cmdlineselect ein und drückst danach die Leertaste... das Ergebnis sieht dann so aus:

    Code
    #Region - CmdlineSelect
    If $CMDLINE[0] Then
        For $i = 1 To $CMDLINE[0]
            Select
                Case $CMDLINE[$i] = '/?'
                    MsgBox(0x40000, @ScriptName & ' Help', _
                            'Switches are:' & @CRLF _
                             & @CRLF & '/extract' _
                             & @CRLF & @TAB & 'Extract files to current directory' _
                             & @CRLF & '/x' _
                             & @CRLF & @TAB & '' _
                             & @CRLF & '/x' _
                             & @CRLF & @TAB & '' _
                             & @CRLF & '/x' _
                             & @CRLF & @TAB & '' _
                             & @CRLF & '/x' _
                             & @CRLF & @TAB & '')
                    Exit
                Case $CMDLINE[$i] = '/extract'
                    FileInstall('x', @ScriptDir & '')
                    Exit
                Case $CMDLINE[$i] = '/x'
                Case $CMDLINE[$i] = '/x'
                Case $CMDLINE[$i] = '/x'
                Case $CMDLINE[$i] = '/x'
                Case Else
                    MsgBox(0x40000, 'Incorrect switch used', _
                            'Command used:' & @CRLF & $CMDLINERAW & @CRLF & _
                            @CRLF & 'Use /? for the switches available.')
                    Exit
            EndSelect
        Next
    EndIf
    #EndRegion
    Alles anzeigen

    Diese Abkürzungen findest du in:

    %LOCALAPPDATA%\AutoIt v3\SciTE\au3abbrev.properties ; vordefinierte Abbrevs

    %LOCALAPPDATA%\AutoIt v3\SciTE\au3userAbbrev.properties ; vom User definierte Abbrevs

    Wenn hinter einem Switch ein Parameter erwartet wird, kannst du das z.B. so machen:

    Code
    Opt('MustDeclareVars', 1)
    
    Global $iTimeCmd, $iPauseCmd
    
    #Region - CmdlineSelect
    If $CMDLINE[0] Then
        For $i = 1 To $CMDLINE[0]
            Select
                Case $CMDLINE[$i] = '/?'
                    MsgBox(0x40000, @ScriptName & ' Help', _
                            'Switches are:' & @CRLF _
                             & @CRLF & '/t <Time in ms>' _
                             & @CRLF & @TAB & 'Time in ms for $iTimeCmd' _
                             & @CRLF & '/p <Time in ms>' _
                             & @CRLF & @TAB & 'Time in ms for $iPauseCmd' _
                             & @CRLF & '/x' _
                             & @CRLF & @TAB & '' _
                             & @CRLF & '/x' _
                             & @CRLF & @TAB & '' _
                             & @CRLF & '/x' _
                             & @CRLF & @TAB & '')
                    Exit
                Case $CMDLINE[$i] = '/t'
                    If $CMDLINE[0] > $i Then
                        $i += 1
                        $iTimeCmd = StringRegExpReplace($CmdLine[$i], '(\d+)', '\1')
                    EndIf
                    MsgBox(64, "$iTimeCmd", $iTimeCmd)
                Case $CMDLINE[$i] = '/p'
                    If $CMDLINE[0] > $i Then
                        $i += 1
                        $iPauseCmd = StringRegExpReplace($CmdLine[$i], '(\d+)', '\1')
                    EndIf
                    MsgBox(64, "$iPausecmd", $iPauseCmd)
                Case $CMDLINE[$i] = '/x'
                Case $CMDLINE[$i] = '/x'
                Case $CMDLINE[$i] = '/x'
                Case Else
                    MsgBox(0x40000, 'Incorrect switch used', _
                            'Command used:' & @CRLF & $CMDLINERAW & @CRLF & _
                            @CRLF & 'Use /? for the switches available.')
                    Exit
            EndSelect
        Next
    EndIf
    #EndRegion - CmdlineSelect
    Alles anzeigen
  • Timer anzeigen lassen...

    • Bitnugger
    • 4. März 2019 um 23:40

    Funktion _Countdown - da erzeugst du alle 1000 ms ein neues Label... obwohl du nur eines brauchst! Das solltest du vorher einmalig erzeugen!

    Damit wir nicht jedes Sandkorn einzeln umdrehen müssen, habe ich dir dein Script mal ein wenig umgeändert, so dass du sehen kannst, wie das mit den Arrays funktioniert und nebenbei auch noch ein paar Fehler korrigiert.

    C
    Opt('MustDeclareVars', 1)
    
    ;~ #include <Array.au3> ; für _ArrayDisplay
    #include <Misc.au3>
    #include <Date.au3>
    #include <Timers.au3>
    #include <GUIConstantsEx.au3>
    #include <ColorConstants.au3>
    #include <StaticConstants.au3>
    
    ConsoleWrite('! ' & _DateTimeFormat(_NowCalc(), 2) & " - " & _DateTimeFormat(_NowCalc(), 3) & ' <-- _DateTimeFormat(_NowCalc(), 2) & " - " & _DateTimeFormat(_NowCalc(), 3)' & @CRLF)
    ConsoleWrite('! ' & _NowDate() & " - " & _NowTime() & ' <-- _NowDate() & " - " & _NowTime()' & @CRLF)
    ConsoleWrite('! ' & _Now() & '   <-- _Now()' & @CRLF)
    
    If Not HotKeySet("!e", "_ExitApp") Then Exit 99999
    
    ;~ Global $hDLL = DllOpen("user32.dll") ; wird an keiner Stelle benutzt!
    
    Global Const $g_IniFile = StringRegExpReplace(@ScriptFullPath, '(.+)\..+$', '\1.ini')
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $g_IniFile --> " & $g_IniFile & @CRLF)
    
    #cs $g_IniFile
    [server]
    serverip=127.0.0.1
    server1=Server1
    server1port=28000
    server2=Server2
    server2port=24000
    server3=Server3
    server3port=7000
    timer=301
    text0=CANTARA
    text1=CATARA
    text2=Server Status
    #ce
    
    Global $iSocket
    
    Global $config_serverip = IniRead($g_IniFile, "server", "serverip", 1)
    Global $config_server1 = IniRead($g_IniFile, "server", "server1", 1)
    Global $config_server1port = IniRead($g_IniFile, "server", "server1port", 1)
    Global $config_server2 = IniRead($g_IniFile, "server", "server2", 1)
    Global $config_server2port = IniRead($g_IniFile, "server", "server2port", 1)
    Global $config_server3 = IniRead($g_IniFile, "server", "server3", 1)
    Global $config_server3port = IniRead($g_IniFile, "server", "server3port", 1)
    Global $config_timer = IniRead($g_IniFile, "server", "timer", 1)
    Global $config_server_text0 = IniRead($g_IniFile, "server", "text0", 1)
    Global $config_server_text1 = IniRead($g_IniFile, "server", "text1", 1)
    Global $config_server_text2 = IniRead($g_IniFile, "server", "text2", 1)
    
    ;~ Global $Form1 = GUICreate($config_server_text0, 120, 220)
    Global $Form1 = GUICreate($config_server_text0, 220, 220)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_ExitApp")
    
    Global $Title1 = GUICtrlCreateLabel($config_server_text1, 0, 4, 110, 42, $SS_CENTER)
    Global $Title2 = GUICtrlCreateLabel($config_server_text2, 0, 20, 110, 42, $SS_CENTER)
    Global $Server1 = GUICtrlCreateLabel("", 5, 40, 12, 12)
    GUICtrlSetBkColor($Server1, 0xaaaaaa)
    Global $Button1 = GUICtrlCreateLabel($config_server1, 22, 40, 110, 20)
    Global $Server2 = GUICtrlCreateLabel("", 5, 60, 12, 12)
    GUICtrlSetBkColor($Server2, 0xaaaaaa)
    Global $Button2 = GUICtrlCreateLabel($config_server2, 22, 60, 110, 20)
    Global $Server3 = GUICtrlCreateLabel("", 5, 80, 12, 12)
    GUICtrlSetBkColor($Server3, 0xaaaaaa)
    Global $Button3 = GUICtrlCreateLabel($config_server3, 22, 80, 110, 20)
    Global $Output1 = GUICtrlCreateLabel("", 5, 100, 110, 28)
    GUICtrlSetBkColor($Output1, 0xdddddd)
    Global $Output2 = GUICtrlCreateLabel("", 5, 132, 110, 28)
    GUICtrlSetBkColor($Output2, 0xdddddd)
    Global $Output3 = GUICtrlCreateLabel("", 5, 164, 110, 28)
    GUICtrlSetBkColor($Output3, 0xdddddd)
    
    Global $idLabelTimeout = GUICtrlCreateLabel('Next Check in: ' & $config_timer & ' s', 0, 198, 110, 72, $SS_CENTER)
    GUICtrlSetFont(-1, 11, 400, 1, "Arial Narrow")
    ; Die Variable $idTimeout besser nicht verwenden, weil könnte böse Falle werden...
    ;~ #include <Misc.au3> --> #include "WinAPIError.au3" --> #include "MsgBoxConstants.au3" --> Global Const $IDTIMEOUT = -1 ; The message box timed out
    
    GUISetState(@SW_SHOW)
    
    TCPStartup()
    
    _ServerCheck()
    AdlibRegister("_ServerCheck", 1000)
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
    
    If $iSocket Then TCPCloseSocket($iSocket)
    TCPShutdown()
    
    Func _ServerCheck()
        Local Static $Timer = 0
        Local Static $aCheck =  [ _
                                    [$Output1, $Server1, $config_server1, $config_server1port], _
                                    [$Output2, $Server2, $config_server2, $config_server2port], _
                                    [$Output3, $Server3, $config_server3, $config_server3port] _
                                ]
        Local Enum $eOutput, $eServer, $econfig_server, $econfig_serverport
    ;~     _ArrayDisplay($aCheck, '$aCheck')
    
        Local $iError, $sStatus, $sDateTime = _Now()
    
        If $Timer = 0 Then
            For $i = 0 To UBound($aCheck) -1 Step 1
                $iSocket = TCPConnect($config_serverip, $aCheck[$i][$econfig_serverport])
                $iError = @error
                $sStatus = GUICtrlRead($aCheck[$i][$eOutput])
                ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $sStatus --> '" & $sStatus & "' StringLen($sStatus) = " & StringLen($sStatus) & @CRLF)
                If $sStatus = '' Or ($iError And StringInStr($sStatus, 'is ok')) Then
                    ConsoleWrite('! GUICtrlSetData($aCheck[$i][$eOutput]' & @CRLF)
                    GUICtrlSetData($aCheck[$i][$eOutput], $aCheck[$i][$econfig_server] & ($iError ? " is down " : " is ok ") & @CRLF & $sDateTime)
                EndIf
                GUICtrlSetBkColor($aCheck[$i][$eServer], $iError ? 0xff0000 : 0x8fff89)
                If Not $iError Then
                    TCPCloseSocket($iSocket)
                    $iSocket = 0
                EndIf
            Next
        EndIf
    
        $Timer = $Timer - 1 < 0 ? $config_timer : $Timer - 1
        GUICtrlSetData($idLabelTimeout, 'Next Check in: ' & $Timer & ' s')
    EndFunc   ;==>_ServerCheck
    
    Func _ExitApp()
        Exit
    EndFunc   ;==>ExitApp
    Alles anzeigen

  • App bzw. Webseite ermitteln, welche generische Anmeldeinformationen hinterlegt

    • Bitnugger
    • 4. März 2019 um 18:12
    Zitat von autoBert

    Die Anmeldedaten kann ich entfernen, scheitere aber an einem 2. Eintrag, der mir auch mit cmdkey /list nicht angezeigt wird. Warscheins wird da ein virtueles Gerät angelegt:


    auf das sich der unbekannte Benutzer (M$?) anmelden möchte. Wenn ich dies noch gelöst bekäme, hätte ich eine Sorge weniger.

    Ich gehe mal davon aus, das du den Eintrag SSO_POP_Device meinst.

    Das SSO steht für Single Sign-on und der unbekannte Benutzer bist Du!

    Zitat von https://de.wikipedia.org/wiki/Single_Sign-on

    Single Sign-on (SSO, mitunter als „Einmalanmeldung“ übersetzt) bedeutet, dass ein Benutzer nach einer einmaligen Authentifizierung an einem Arbeitsplatz auf alle Rechner und Dienste, für die er lokal berechtigt (autorisiert) ist, am selben Arbeitsplatz zugreifen kann, ohne sich jedes Mal neu anmelden zu müssen. Wechselt der Benutzer den Arbeitsplatz, wird die Authentifizierung, wie auch die lokale Autorisierung, hinfällig.

    Die SSO-Anmeldeinformationen dienen ergo ausschließlich dazu, dass Du nach einer einmaligen Authentifizierung automatisch bei einer Windows-App oder einem Microsoft-Dienst anmelden werden kannst, wenn du es möchtest.

    Die SSO Einträge dauerhaft zu entfernen ist, soweit ich weiß, nicht möglich. Du könntest lediglich den Dienst Anmeldeinformationsverwaltung deaktivieren, was aber auch sinnfrei wäre...

  • Timer anzeigen lassen...

    • Bitnugger
    • 2. März 2019 um 18:27

    Aus _FirstCheck() und _ServerCheck() kannst du eine Funktion machen, wobei ich eh nicht verstehe, wieso du in _FirstCheck() beide Hintergrundfarben setzt, und in _ServerCheck() nur eine.

    Zitat von Ram3000

    If $socket1 = -1 Then

    Das kann in die Hose gehen, weil $socket1 im Fall eines Fehlers auch 0 sein kann... deshalb besser auf @error prüfen! Zudem solltest du den Socket mit TCPCloseSocket() wieder schließen, wenn du ihn nicht mehr brauchst!

    Mit dem Tenary-Operator kannst du auch noch einige Zeilen an Code einsparen... das ist eine verkürzte Form von If...Else...EndIf.

    Hier ein Bsp.:

    Code
    Local $iSocket, $iError, $sDateTime = _DateTimeFormat(_NowCalc(), 2) &" - "& _DateTimeFormat(_NowCalc(), 4)
    
    $iSocket = TCPConnect($config_serverip, $config_server1port)
    $iError = @error
    GuiCtrlSetData($Output1, $config_server1 & ($iError ? " is down " : " is ok ") &@CRLF& $sDateTime)
    GUICtrlSetBkColor($Server1, $iError ? 0xff0000 : 0x8fff89)
    If Not $iError Then TCPCloseSocket($iSocket)
    
    $iSocket = TCPConnect($config_serverip, $config_server2port)
    $iError = @error
    ; ...
    Alles anzeigen
  • MMC starten und Menüoption auswählen

    • Bitnugger
    • 1. März 2019 um 20:54

    Deine Fragestellung ist mir ein Buch mit sieben Siegeln... denn in meiner MMC-Console (Windows 7/10) gibt es kein "Suchen"... und schon gar keine Option, mit diesem Namen.

    Mach doch bitte mal ein Bild von dem Fenster...

  • Zoom in _IECreateEmbedded

    • Bitnugger
    • 28. Februar 2019 um 22:27
    Zitat von Joschy41

    einfach: "Stadt" Wetter eintippt) und der Uhrzeit.

    es geht auch...

    "Stadt" Wetter Freitag

    oder...

    "Stadt" Wetter übermorgen

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™