Beiträge von Bitnugger
-
-
Jepp... mit _WinAPI_GetWindowInfo() bekomme ich die korrekte Größe angezeigt...
AutoIt
Alles anzeigen;-- 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
-
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()...
-
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?
-
Kann mir bitte mal jemand erklären, wieso das AutoIt Info Tool eine andere Größe anzeigt, als die Funktion WinGetPos()?
AutoIt
Alles anzeigen;-- 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
-
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.
-
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...
-
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:
AutoItCase "UserFunction" $sTemplatePath = 'DEFAULT' $sTemplatePath = StringReplace($sTemplatePath, $item[0], ($vData($item[2]))($item[3], $vData)) ConsoleWrite('! $sTemplatePath = ' & $sTemplatePath & @CRLF) ; ...
Ausgabe:
! $sTemplatePath = DEFAULT
-
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)
-
Und wenn das eine UDF sein soll, solltest du zumindest im Header die Felder Description und Return values korrekt befüllen!
-
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
Alles anzeigen;-- 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
-
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
Alles anzeigen;-- 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
-
Wenn die Msg nicht an die org. WinProc weitergereicht werden soll...
AutoIt
Alles anzeigen;-- 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
-
Guckst du hier: https://www.autoitscript.com/forum/topic/15…ubclassing-bug/
So funktioniert es...
AutoIt
Alles anzeigen;-- 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
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.
-
-
Danke, habe jetzt beide "linux" korrigiert.
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
Alles anzeigen;-- 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
-
Ja, tatsächlich... hm, ok, habe es korrigiert.
-
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
-
AutoIt
Alles anzeigen;-- 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
Ich würde das aber etwa so machen...
AutoIt
Alles anzeigen;-- 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
-
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
Alles anzeigen$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