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

  • Kann man um einen String "replacen"?

    • Bitnugger
    • 18. Juli 2018 um 16:08

    So geht es auch...

    AutoIt
    Local $sRX, $sRead = 'Inf file is C:\Windows\INF\oem10.inf' & @CRLF
    $sRX = StringRegExpReplace($sRead, '(?i).*([a-z]:.*)\R?', '$1')
    ConsoleWrite("$sRX --> " & $sRX & @CRLF)
  • AutoIt Info Tool zeigt andere Größe an, als WinGetPos()

    • Bitnugger
    • 17. Juli 2018 um 19:29

    Jepp... mit _WinAPI_GetWindowInfo() bekomme ich die korrekte Größe angezeigt...

    AutoIt
    ;-- TIME_STAMP   2018-07-17 19:27:24   v 0.1
    
    #Region    ;************ Includes ************
    #Include <WinAPISysWin.au3>
    ;~ #Include <WindowsConstants.au3>;~~~
    #Include <WinAPIGdi.au3>
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #EndRegion ;************ Includes ************
    
    _Example()
    
    Func _Example()
        #Region - GUI Create
        Local $hWnd = GUICreate('WinPos')
        Local $idLabel_WP = _CreateLabel('', 10,  0, 380, 30)
        Local $idLabel_WI = _CreateLabel('', 10, 50, 380, 30)
        GUISetState()
        #EndRegion
    
        Local $aWinPos     = WinGetPos($hWnd)
    
        Local $tWindowInfo = _WinAPI_GetWindowInfo($hWnd)
    ;~     Press Ctrl+Shift+O --> https://msdn.microsoft.com/de-de/library/windows/desktop/ms632610(v=vs.85).aspx
    ;~     ConsoleWrite('$tagWindowInfo = ' & $tagWindowInfo & @CRLF)
        Local $tWindow     = DllStructCreate($tagRECT, DllStructGetPtr($tWindowInfo, 'rWindow')) ; rcWindow = rWindow
        Local $aWindow     = _WinAPI_GetPosFromRect($tWindow)
    
        GUICtrlSetData($idLabel_WP, '$aWinPos     = ' & _ArrayToString($aWinPos, ', '))
        GUICtrlSetData($idLabel_WI, '$aWindow     = ' & _ArrayToString($aWindow, ', '))
    
        #Region - GUI SwitchLoop
        While True
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    Exit
            EndSwitch
        WEnd
        #EndRegion
    EndFunc  ;==>_Example
    
    Func _CreateLabel($sText, $x, $y, $w, $h, $iSize = 14, $iWeight = 800, $iAttribute = 0, $sFontName = 'Courier New', $iQuality = 2)
        Local $idLabel = GUICtrlCreateLabel($sText, $x, $y, $w, $h)
        GUICtrlSetFont(-1, $iSize, $iWeight, $iAttribute, $sFontName, $iQuality)
        Return $idLabel
    EndFunc
    Alles anzeigen

    pasted-from-clipboard.png

  • AutoIt Info Tool zeigt andere Größe an, als WinGetPos()

    • Bitnugger
    • 17. Juli 2018 um 18:57

    Danke autoiter, aber _WinAPI_GetSystemMetrics() hilft mir da auch nicht weiter, weil ich für jedes Fenster/Programm einen anderen Skin verwenden kann und mir _WinAPI_GetSystemMetrics() nur die Werte liefert, die der aktuelle Default-Skin hat. Ich versuche es gerade mit der Funktion _WinAPI_GetWindowInfo()...

  • AutoIt Info Tool zeigt andere Größe an, als WinGetPos()

    • Bitnugger
    • 17. Juli 2018 um 18:00
    Zitat von alpines

    Könnte an deinem Skin liegen

    Hm, stimmt... liegt am Skin... auf meinem Mini-Server (Windows 7) wird es richtig angezeigt... ist ja wirklich sehr interessant... dadurch ergeben sich zwei Fragen:

    • Wie kommt das AutoIt Info Tool an die korrekte Größe?
    • Wieso zeigt WinGetPos() nicht die korrekte Größe an?
  • AutoIt Info Tool zeigt andere Größe an, als WinGetPos()

    • Bitnugger
    • 17. Juli 2018 um 17:37

    Kann mir bitte mal jemand erklären, wieso das AutoIt Info Tool eine andere Größe anzeigt, als die Funktion WinGetPos()?

    AutoIt
    ;-- TIME_STAMP   2018-07-17 17:23:54   v 0.1
    
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    
    _Example()
    
    Func _Example()
        #Region - GUI Create
        Local $hWnd = GUICreate('WinPos')
        Local $idLabel_WP = GUICtrlCreateLabel('', 10, 100, 300, 30)
        GUICtrlSetFont(-1, 14, 800)
        GUISetState()
        #EndRegion
    
        Local $aWinPos = WinGetPos($hWnd)
        GUICtrlSetData($idLabel_WP, '$aWinPos = ' & _ArrayToString($aWinPos, ', '))
    
        #Region - GUI SwitchLoop
        While True
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    Exit
            EndSwitch
        WEnd
        #EndRegion
    EndFunc  ;==>_Example
    Alles anzeigen

    pasted-from-clipboard.png

  • Mustache Template fuer AutoIt

    • Bitnugger
    • 17. Juli 2018 um 13:01

    Das werde ich machen... wenn du den UDF-Header vernüftig ausfüllst und eine allgemeine Beschreibung dazu lieferst, wofür denn das Mustache überhaupt gut ist. ;)

  • Mustache Template fuer AutoIt

    • Bitnugger
    • 16. Juli 2018 um 19:23

    So funktioniert es auch ohne #AutoIt3Wrapper_Run_AU3Check=n und die UserFunction wird nun auch wie beabsichtigt aufgerufen... was vorher nicht der Fall war... aber mit dem Ergebnis kann ich nichts anfangen...

    Edit: Nur einige Zeilen in Mustache.au3 vertauscht... damit man besser erkennen kann, was Sache ist...

    Dateien

    Mustache_Test.au3 1,42 kB – 263 Downloads Mustache.au3 7,78 kB – 454 Downloads
  • Mustache Template fuer AutoIt

    • Bitnugger
    • 16. Juli 2018 um 18:13

    Ich meinte damit, wie es von AU3Check interpretiert wird...

    Mit der Direktive...

    #AutoIt3Wrapper_Run_AU3Check=n

    ...im Test-Script läuft es ohne Fehler durch...

    ...und bei Case "UserFunction" ist $sTemplatePath = Hello {{name}}

    Edit:

    AutoIt
    Case "UserFunction"
        $sTemplatePath = 'DEFAULT'
        $sTemplatePath = StringReplace($sTemplatePath, $item[0], ($vData($item[2]))($item[3], $vData))
        ConsoleWrite('! $sTemplatePath = ' & $sTemplatePath & @CRLF)
    ; ...

    Ausgabe:

    ! $sTemplatePath = DEFAULT

  • Mustache Template fuer AutoIt

    • Bitnugger
    • 16. Juli 2018 um 17:48

    Dann schau dir die Syntax zu StringReplace noch mal genauer an...

    AutoIt
    ;~                      StringReplace("string"      , "searchstring/start", "replacestring" [          , occurrence = 0 [, casesense = 0]] )
           $sTemplatePath = StringReplace($sTemplatePath, $item[0]            , ($vData($item[2]))($item[3], $vData))
    
    ;~ Demnach wäre...
    ;~ string             = $sTemplatePath
    ;~ searchstring/start = $item[0]
    ;~ replacestring      = ($vData($item[2]))($item[3]
    ;~ occurrence         = $vData)
  • Mustache Template fuer AutoIt

    • Bitnugger
    • 16. Juli 2018 um 14:30

    pasted-from-clipboard.png

    Und wenn das eine UDF sein soll, solltest du zumindest im Header die Felder Description und Return values korrekt befüllen!

  • Status von Service abfragen

    • Bitnugger
    • 16. Juli 2018 um 13:07
    Zitat von Racer

    Wäre das nicht eleganter über WMI?

    Eleganz liegt im Auge des Betrachters... viel wichtiger ist, dass man selbst versteht, was in der Funktion passiert.

    AutoIt
    ;-- TIME_STAMP   2018-07-16 12:39:00   v 0.1
    
    Global $aService = ['LanmanServer', 'Schedule', 'mysql', 'synergy', 'linux']
    
    Global $vRet = _CheckService($aService)
    If @error > 0 Then
        ConsoleWrite('! At least one Service ist not running: ' & $aService[@extended] & @CRLF)
    ElseIf $vRet == 0 Then
        ConsoleWrite('! At least one Service ist not installed: ' & $aService[@extended] & @CRLF)
    Else
        ConsoleWrite('+ All Services are running!' & @CRLF)
    EndIf
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _CheckService
    ; Description ...: Checks a list of services if they have been installed and started.
    ; Syntax ........: _CheckService(Byref $_aServiceNames[, $_sMachine = '.'])
    ; Parameters ....: $_aServiceNames      - [in/out] an array of service names.
    ;                  $_sMachine           - [optional] an string value, the (Remote) Computer name. Default is '.'.
    ; Return values .: Success:             - True                       - All service are running.
    ;                  Failure:             - Error by ObjGet            - False and set @error to -1
    ;                                       - Error by ExecQuery         - False and set @error to -2
    ;                                       - a service is not running   - False and set @error to 1 and @extended to index in list.
    ;                                       - a service is not installed - 0 and set @extended to index in list.
    ; Author ........: Bitnugger
    ; Modified ......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......: No
    ; ===============================================================================================================================
    Func _CheckService(ByRef $_aServiceNames, $_sMachine = '.')
        Local Const $wbemFlags = 0x10 ; ReturnImmediately
        Local $iItemCount, $colItems, $objItem, $objWMIService = ObjGet("winmgmts:\\" & $_sMachine & "\root\CIMV2")
        If @error Then Return SetError(-1, 0, False)
        For $i = 0 To UBound($_aServiceNames) -1 Step 1
            $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE Name = '" & $_aServiceNames[$i] & "'", "WQL", $wbemFlags)
            If @error Or Not IsObj($colItems) Then Return SetError(-2, $i, False)
            $iItemCount = 0
            For $objItem In $colItems
                $iItemCount = $colItems.Count
                Switch True
                    Case $objItem.State = 'Running'
                        ContinueLoop 2
                    Case $objItem.State = 'Stopped'
                        Return SetError(1, $i, False)
                EndSwitch
            Next
            If $iItemCount = 0 Then Return SetExtended($i, 0) ; Service not found/installed
        Next
        Return True
    EndFunc   ;==>_CheckService
    Alles anzeigen
  • Wert von Controls Anzeigen

    • Bitnugger
    • 14. Juli 2018 um 21:36
    Zitat von Kizum

    Ein Event kommt aber erst zustande wenn ich Enter drücke.

    Nein, das ist so nicht richtig... du weißt halt nur noch nicht, welche es sind und wie du sie abfragen kannst.

    In deinem Fall ist $WM_COMMAND dein Freund!

    Hier ein kleines Beispiel... in der AutoIt-Hilfe findest du im Anhang (Appendix) eine Liste mit Windows Message Codes.

    AutoIt
    ;-- TIME_STAMP   2018-07-14 21:26:18   v 0.1
    
    #Region    ;************ Includes ************
    #Include <WinAPIConv.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #EndRegion ;************ Includes ************
    
    Global $hGui, $idButton_AbDamit, $idLabel_ShowInp, $aInp[21]
    
    _Main()
    
    Func _Main()
        $hGui = GUICreate("T17", 1060, 230, -1, -1, $WS_SIZEBOX + $WS_SYSMENU)
    
        $idButton_AbDamit = GUICtrlCreateButton("Ab damit!", 10, 80, 120, 40)
        GUICtrlSetResizing(-1, BitOR($GUI_DOCKWIDTH, $GUI_DOCKHEIGHT))
        $idLabel_ShowInp = GUICtrlCreateLabel("Inp[0] = '<'", 10, 150, 1040, 40)
    ;~     GUICtrlSetResizing(-1, BitOR($GUI_DOCKWIDTH, $GUI_DOCKHEIGHT))
        GUICtrlSetFont(-1, 24)
        GUICtrlSetColor(-1, 0xFF0000)
        GUICtrlSetBkColor(-1, 0x483D8B)
    
        Local $x = 10, $sText
        For $i = 0 To 20 Step 1
            $aInp[$i] = GUICtrlCreateInput("<", $x, 40, 40, 20)
            GUICtrlSetResizing(-1, $GUI_DOCKWIDTH)
            $x += 50
        Next
        GUICtrlSetState($aInp[0], $GUI_FOCUS)
    
        GUISetState(@SW_SHOW, $hGui)
    
        ; Sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated.
        GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")
    
        Local $nMsg
        While 1
            $nMsg = GUIGetMsg()
            Switch $nMsg
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case $idButton_AbDamit
                    $sText = '! $idButton_AbDamit --> '
                    For $i = 0 To UBound($aInp) - 1 Step +1
                        $sText &= GUICtrlRead($aInp[$i]) & ', '
                        GUICtrlSetData($aInp[$i], "<" & $i & ">")
                    Next
                    GUICtrlSetState($aInp[0], $GUI_FOCUS)
                    ConsoleWrite(StringTrimRight($sText, 2) & @CRLF)
            EndSwitch
        WEnd
    EndFunc  ;==>_Main
    
    
    Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
        Local $hWndFrom, $iIDFrom, $iCode
        $hWndFrom = $lParam
        $iIDFrom = _WinAPI_LoWord($wParam)
        $iCode = _WinAPI_HiWord($wParam)
    
        Switch $iIDFrom
            Case $aInp[0] To $aInp[UBound($aInp) -1]
                Local $idInput = $iIDFrom - $aInp[0]
                Switch $iCode
                    Case $EN_KILLFOCUS
                        ConsoleWrite('- _WM_COMMAND: $EN_KILLFOCUS - $aInp['&$idInput&'] hast lost focus!' & @CRLF)
                    Case $EN_SETFOCUS
                        ConsoleWrite('+ _WM_COMMAND: $EN_SETFOCUS  - $aInp['&$idInput&'] now has the focus!' & @CRLF)
                        GUICtrlSetData($idLabel_ShowInp, "Inp["&$idInput&"] = '"&GUICtrlRead($iIDFrom)&"'")
                    Case $EN_CHANGE
                        ConsoleWrite('! _WM_COMMAND: $EN_CHANGE    - $aInp['&$idInput&'] content has changed! --> ' & GUICtrlRead($iIDFrom) & @CRLF)
                        GUICtrlSetData($idLabel_ShowInp, "Inp["&$idInput&"] = '"&GUICtrlRead($iIDFrom)&"'")
                EndSwitch
        EndSwitch
    EndFunc  ;==>_WM_COMMAND
    Alles anzeigen
  • Mehrere UDFs mit WindowProc verketten

    • Bitnugger
    • 14. Juli 2018 um 17:12

    Wenn die Msg nicht an die org. WinProc weitergereicht werden soll...

    AutoIt
    ;-- TIME_STAMP   2018-07-14 17:07:10   v 0.1
    
    #include <WinAPISysInternals.au3>
    #include <WinAPISysWin.au3>
    #include <WindowsConstants.au3>
    
    OnAutoItExitRegister('_Exit')
    
    Global $hGui = GUICreate('Test', 640, 480)
    GUISetState()
    
    #Region stellt die 1.UDF dar
    Global $hProcNew1 = DllCallbackRegister('_WindowProc1', 'ptr', 'hwnd;uint;wparam;lparam')
    Global $hProcOld1 = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProcNew1))
    ConsoleWrite('> $hProcNew1                = 0x' & Hex($hProcNew1) & @CRLF)
    ConsoleWrite('> $hProcOld1 (Orig WinProc) = 0x' & Hex($hProcOld1) & @CRLF)
    #EndRegion
    
    #Region stellt die 2.UDF dar
    Global $hProcNew2 = DllCallbackRegister('_WindowProc2', 'ptr', 'hwnd;uint;wparam;lparam')
    Global $hProcOld2 = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProcNew2))
    ConsoleWrite('> $hProcNew2                = 0x' & Hex($hProcNew2) & @CRLF)
    ConsoleWrite('> $hProcOld2                = 0x' & Hex($hProcOld2) & @CRLF)
    #EndRegion
    
    Do
    Until GUIGetMsg() = -3
    Exit
    
    Func _Exit()
        Local $ret
        If $hProcOld2 Then
            $ret = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, $hProcOld2)
            ConsoleWrite('! ret $hProcOld2            = 0x' & Hex($ret) & @CRLF)
            DllCallbackFree($hProcNew2)
        EndIf
    
        If $hProcOld1 Then
            $ret = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, $hProcOld1)
            ConsoleWrite('! ret $hProcOld1            = 0x' & Hex($ret) & @CRLF)
            DllCallbackFree($hProcNew1)
        EndIf
    
        $ret = _WinAPI_GetWindowLong($hGui, $GWL_WNDPROC) ; zum testen, ob der Originalwert wieder bei der Gui eingetragen ist
        ConsoleWrite('! ret Orig WinProc          = 0x' & Hex($ret) & @CRLF)
    EndFunc   ;==>_Exit
    
    Func _WindowProc1($hWnd, $iMsg, $wParam, $lParam)
        Switch $iMsg
            Case $WM_MOUSEWHEEL
                ConsoleWrite('+ _WindowProc1        $iMsg = $WM_MOUSEWHEEL' & @CRLF)
                Return True ; Diese Msg nicht weiter verarbeiten!
        EndSwitch
    
        Return DllCall("user32.dll", "lresult", "CallWindowProc", "ptr", $hProcOld1, "hwnd", $hWnd, "uint", $iMsg, "wparam", $wParam, "lparam", $lParam)[0]
    EndFunc   ;==>_WindowProc1
    
    Func _WindowProc2($hWnd, $iMsg, $wParam, $lParam)
        Switch $iMsg
            Case $WM_WINDOWPOSCHANGED
                ConsoleWrite('- _WindowProc2        $iMsg = $WM_WINDOWPOSCHANGED' & @CRLF)
                Return True ; Diese Msg nicht weiter verarbeiten!
        EndSwitch
    
        Return DllCall("user32.dll", "lresult", "CallWindowProc", "ptr", $hProcOld2, "hwnd", $hWnd, "uint", $iMsg, "wparam", $wParam, "lparam", $lParam)[0]
    EndFunc   ;==>_WindowProc2
    Alles anzeigen
  • Mehrere UDFs mit WindowProc verketten

    • Bitnugger
    • 14. Juli 2018 um 13:11

    Guckst du hier: https://www.autoitscript.com/forum/topic/15…ubclassing-bug/

    So funktioniert es...

    AutoIt
    ;-- TIME_STAMP   2018-07-14 13:09:59   v 0.1
    
    #include <WinAPISysInternals.au3>
    #include <WinAPISysWin.au3>
    #include <WindowsConstants.au3>
    
    OnAutoItExitRegister('_Exit')
    
    Global $hGui = GUICreate('Test', 640, 480)
    GUISetState()
    
    #Region stellt die 1.UDF dar
    Global $hProcNew1 = DllCallbackRegister('_WindowProc1', 'ptr', 'hwnd;uint;wparam;lparam')
    Global $hProcOld1 = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProcNew1))
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') :  $hProcOld1 = ' &  $hProcOld1 & @CRLF) ;### Debug Console
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hProcOld1 (Orig WinProc) = 0x' & Hex($hProcOld1) & @CRLF) ;### Debug Console
    #EndRegion
    
    #Region stellt die 2.UDF dar
    Global $hProcNew2 = DllCallbackRegister('_WindowProc2', 'ptr', 'hwnd;uint;wparam;lparam')
    Global $hProcOld2 = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProcNew2))
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hProcOld2 = ' & $hProcOld2 & @CRLF) ;### Debug Console
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hProcOld2 = 0x' & Hex($hProcOld2) & @CRLF) ;### Debug Console
    #EndRegion
    
    Do
    Until GUIGetMsg() = -3
    Exit
    
    Func _Exit()
        Local $ret
        If $hProcOld2 Then
            $ret = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, $hProcOld2)
            ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : ret $hProcOld2 = 0x' & Hex($ret) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
            DllCallbackFree($hProcNew2)
        EndIf
    
        If $hProcOld1 Then
            $ret = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, $hProcOld1)
            ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : ret $hProcOld1 = 0x' & Hex($ret) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
            DllCallbackFree($hProcNew1)
        EndIf
    
        $ret = _WinAPI_GetWindowLong($hGui, $GWL_WNDPROC) ; zum testen, ob der Originalwert wieder bei der Gui eingetragen ist
        ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : Orig WinProc = 0x' & Hex($ret) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    EndFunc   ;==>_Exit
    
    
    Func _WindowProc1($hWnd, $iMsg, $wParam, $lParam)
        Switch $iMsg
            Case $WM_MOUSEWHEEL
                ConsoleWrite('_WindowProc1 $WM_MOUSEWHEEL' & @CR)
        EndSwitch
        Return DllCall("user32.dll", "lresult", "CallWindowProc", "ptr", $hProcOld1, "hwnd", $hWnd, "uint", $iMsg, "wparam", $wParam, "lparam", $lParam)[0]
    EndFunc   ;==>_WindowProc1
    
    Func _WindowProc2($hWnd, $iMsg, $wParam, $lParam)
        Switch $iMsg
            Case $WM_WINDOWPOSCHANGED
                ConsoleWrite('_WindowProc2 $WM_WINDOWPOSCHANGED' & @CR)
        EndSwitch
        Return DllCall("user32.dll", "lresult", "CallWindowProc", "ptr", $hProcOld2, "hwnd", $hWnd, "uint", $iMsg, "wparam", $wParam, "lparam", $lParam)[0]
    EndFunc   ;==>_WindowProc2
    Alles anzeigen

    Edit: Hier noch ein Tip: Wenn das Script kompiliert ist, funktioniert die Ausgabe mit @CR nicht, denn die Eingabeaufforderung braucht ein @LF, um in die nächste Zeile zu kommen.

  • Variablen - Code kürzer schreiben

    • Bitnugger
    • 13. Juli 2018 um 18:28

    Oder so... dann steht in $aText[0] allerdings die Anzahl der Spalten...

    AutoIt
    Local $aText = _GUICtrlListView_GetItemTextArray($hListView, $iInputIndex)
  • Status von Service abfragen

    • Bitnugger
    • 13. Juli 2018 um 18:13

    @Musashi

    Danke, habe jetzt beide "linux" korrigiert.

    dieselwiesel

    Deine Beschreibung zu dem was du willst ist sehr ungenau. Was soll z. B. passieren, wenn nur ein Service in der Liste nicht installiert ist?

    So, hier noch ein Beispiel, dass deinen Wünschen evtl. besser entspricht... und mehr gibt es zu diesem Thema nicht von mir... grins

    AutoIt
    ;-- TIME_STAMP   2018-07-13 18:10:57   v 0.1
    
    #Region    ;************ Includes ************
    #Include <Array.au3>
    #EndRegion ;************ Includes ************
    
    Global $aService = ['LanmanServer', 'Schedule', 'mysql', 'synergy', 'linux']
    
    Global $vRet = _CheckService($aService)
    If @error Then
        ConsoleWrite('! At least one Service ist not running: ' & $aService[@extended] & @CRLF)
    ElseIf $vRet == 0 Then
        ConsoleWrite('! At least one Service ist not installed: ' & $aService[@extended] & @CRLF)
    EndIf
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _CheckService
    ; Description ...: Checks a list of services if they have been installed and started.
    ; Syntax ........: _CheckService(Byref $aService)
    ; Parameters ....: $aService            - [in/out] an array of service names.
    ; Return values .: Success:             - True                       - All service are running.
    ;                  Failure              - error by Run()             - False and set @error to -1
    ;                                         a service is not running   - False and set @error to index in list.
    ;                                         a service is not installed - return 0 and set @extended to index in list.
    ; Author ........: Bitnugger
    ; Modified ......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......: No
    ; ===============================================================================================================================
    Func _CheckService(ByRef $aService)
        Local $sCMD, $iPID
    
        For $i = 0 To UBound($aService) - 1
            $sCMD = StringFormat('%s /C sc.exe query %s | find "STATE"', @ComSpec, $aService[$i])
            ConsoleWrite('> $sCMD = ' & $sCMD & @CRLF)
            $iPID = Run($sCMD, @SystemDir, @SW_HIDE, $STDOUT_CHILD)
            If Not $iPID Then Return SetError(-1, 0, False)
            ProcessWaitClose($iPID)
            $sOutput = StdoutRead($iPID)
            ConsoleWrite('- ' & $sOutput & @CRLF)
            Switch True
                Case StringRegExp($sOutput, 'RUNNING')
                    ContinueLoop
                Case StringRegExp($sOutput, 'STOPPED')
                    Return SetError(1, $i, False)
                Case Else
                    Return SetExtended($i, 0)
            EndSwitch
        Next
    EndFunc  ;==>_CheckService
    Alles anzeigen
  • Status von Service abfragen

    • Bitnugger
    • 13. Juli 2018 um 13:35

    Ja, tatsächlich... hm, ok, habe es korrigiert. ^^

  • Status von Service abfragen

    • Bitnugger
    • 13. Juli 2018 um 12:44
    Zitat von Musashi

    Habe ich was an den Augen, oder steht hier 'Iinux' mit einem großem i ?

    Du hast was an den Augen... ;)

    So sähe es mit großem i aus: lInux

  • Status von Service abfragen

    • Bitnugger
    • 13. Juli 2018 um 11:59
    AutoIt
    ;-- TIME_STAMP   2018-07-13 11:57:41   v 0.1
    
    #include <AutoItConstants.au3>
    
    Global $aService = ['LanmanServer', 'Schedule', 'mysql', 'synergy', 'linux']
    
    MsgBox(0, "", '_CheckService = ' & _CheckService($aService) & @CRLF & '@error = ' & @error & @CRLF & '@extended = ' & @extended)
    
    Func _CheckService(ByRef $aService)
        Local $sCMD, $iPID, $iError = 0, $iExtended = 0
    
        For $i = 0 To UBound($aService) - 1
            $sCMD = StringFormat('%s /C sc.exe query %s | find "STATE"', @ComSpec, $aService[$i])
            ConsoleWrite('> $sCMD = ' & $sCMD & @CRLF)
            $iPID = Run($sCMD, @SystemDir, @SW_HIDE, $STDOUT_CHILD)
            If Not $iPID Then Return SetError(-1, $i, False)
            ProcessWaitClose($iPID)
            $sOutput = StdoutRead($iPID)
            ConsoleWrite($sOutput & @CRLF)
            Switch True
                Case StringRegExp($sOutput, 'RUNNING')
                    ContinueLoop
                Case StringRegExp($sOutput, 'STOPPED')
                    $iExtended += 1
                Case Else
                    $iError += 1
            EndSwitch
        Next
    
        Return SetError($iError, $iExtended, ($iError Or $iExtended) ? False : True)
    EndFunc
    Alles anzeigen

    Ich würde das aber etwa so machen...

    AutoIt
    ;-- TIME_STAMP   2018-07-13 12:23:55   v 0.1
    
    #Region    ;************ Includes ************
    #Include <Array.au3>
    #EndRegion ;************ Includes ************
    
    Global $aService = ['LanmanServer', 'Schedule', 'mysql', 'synergy', 'linux']
    
    Global $vRet = _CheckService($aService)
    If @error Or @extended Then _ArrayDisplay($vRet, '$vRet', '', 0, Default, 'ID|NAME|STATE')
    
    Func _CheckService(ByRef $aService)
        Local $aRet[0][3], $sCMD, $iPID, $iError = 0, $iExtended = 0
    
        For $i = 0 To UBound($aService) - 1
            $sCMD = StringFormat('%s /C sc.exe query %s | find "STATE"', @ComSpec, $aService[$i])
            ConsoleWrite('> $sCMD = ' & $sCMD & @CRLF)
            $iPID = Run($sCMD, @SystemDir, @SW_HIDE, $STDOUT_CHILD)
            If Not $iPID Then Return SetError(-1, $i, False)
            ProcessWaitClose($iPID)
            $sOutput = StdoutRead($iPID)
            ConsoleWrite($sOutput & @CRLF)
            Switch True
                Case StringRegExp($sOutput, 'RUNNING')
                    ContinueLoop
                Case StringRegExp($sOutput, 'STOPPED')
                    _ArrayAdd($aRet, $i & '|' & $aService[$i] & '|' & 'STOPPED')
                    $iExtended += 1
                Case Else
                    _ArrayAdd($aRet, $i & '|' & $aService[$i] & '|' & 'NOT INSTALLED')
                    $iError += 1
            EndSwitch
        Next
    
        Return SetError($iError, $iExtended, ($iError Or $iExtended) ? $aRet : True)
    EndFunc
    Alles anzeigen
  • Listview-Datenbank v3

    • Bitnugger
    • 12. Juli 2018 um 05:08

    Hast du die Zeilen 24-26 schon angepasst?

    Global Const $iColCount

    Global Const $aHeader

    Global Const $aColJustify


    Zeile 347-349 in _SortListview() hast du bereits auskommentiert?

    ;~ If $iSortCol = 0 Then _SwitchDateForSort($aDatabase, $iSortCol) ; in Spalte 0 steht das Datum, deshalb nach yyyy.mm.dd wandeln

    ;~ _ArraySort($aDatabase, $iDescending, 0, 0, $iSortCol) ; die Datenbank sortieren

    ;~ If $iSortCol = 0 Then _SwitchDateForList($aDatabase, $iSortCol) ; nach dem Sortieren das Datum wieder nach dd.mm.yyyy wandeln


    Und hier noch ein sehr kurz gehaltenes Beispiel, wie du den Rest in etwa umsetzen kannst...

    AutoIt
    $hWnd = WinGetHandle('[CLASS:SciTEWindow]')
    $sClassName = _WinAPI_GetClassName($hWnd)
    $sTitle = WinGetTitle($hWnd)
    $iPID = WinGetProcess($hWnd)
    $sType = _WinAPI_IsWow64Process($iPID) ? '32-Bit' : '64-Bit'
    $sProcessName = _ProcessGetName($iPID)
    $sProcessFileName = _WinAPI_GetProcessFileName($iPID)
    ;           0  1    2           3         4     5    6   7  ; 0, 1, 6 = Number; 2, 3, 4, 5, 7 = String
    $sHeader = 'ID|HWND|ProcessName|ClassName|Title|Type|PID|FilePath'
    $idListView = GUICtrlCreateListView($sHeader, 10, 50, $iWidth - 20, $iHeight - 100, $LVS_SHOWSELALWAYS, BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE, $LVS_EX_DOUBLEBUFFER, $LVS_EX_SUBITEMIMAGES))
    $hImageList = _GUIImageList_Create()
    _GUIImageList_AddIcon($hImageList, $sProcessFileName, 0, True) ; True = Small icon, False = Large icon
    $hPrevImageList = _GUICtrlListView_SetImageList($idListview, $hImageList, 1) ; 1 = small icons
    _GUICtrlListView_AddItem($idListView, 1) ; ID
    _GUICtrlListView_AddSubItem($idListView, 0, $hWnd, 1, 0) ; Image 0
    _GUICtrlListView_AddSubItem($idListView, 0, $sProcessName, 2) ; kein Image
    _GUICtrlListView_AddSubItem($idListView, 0, $sClassName, 3) ; kein Image
    _GUICtrlListView_AddSubItem($idListView, 0, $sTitle, 4) ; kein Image
    _GUICtrlListView_AddSubItem($idListView, 0, $sType, 5) ; kein Image
    _GUICtrlListView_AddSubItem($idListView, 0, $iPID, 6) ; kein Image
    _GUICtrlListView_AddSubItem($idListView, 0, $sProcessFileName, 7) ; kein Image
    
    Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        ; ...
        Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
            $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
            $iIndex = DllStructGetData($tInfo, "Index")
            ; $iSubItem = DllStructGetData($tInfo, "SubItem")
            $hWnd = _GUICtrlListView_GetItemText($idListView, $iIndex, 1)
            WinActivate($hWnd)
            ;Return 1 ; not to allow the default processing
            Return 0 ; allow the default processing
        ; ...
        
        Return $GUI_RUNDEFMSG ; Anweisung an Windows, dass es mit der normalen Abarbeitung fortfahren kann
    EndFunc   ;==>_WM_NOTIFY
    Alles anzeigen

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™