Global Static $obWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2') Global $Com_Fehler = ObjEvent('AutoIt.Error', 'Com_Fehler') Global $Error = False Global $i = 0 Global $Max = 255 Global $aDFL[$Max][5], $DCN, $GWMFN, $Cont = 1 Global $Not_Klassenname = 'Button|Progman|DV2ControlHost|Desktop User Picture|tooltips_class32' Func New_Prozess($Flag, $Process_New, $Error) Local $Us, $sU Local $co = $obWMI.ExecQuery('SELECT * FROM Win32_Process') If Not IsObj($co) Then Return SetError(1, 1, -1) Switch $Flag Case 0 Local $Prozess[1][8] For $ob In $co If ($ob.ProcessId = $Process_New) Then $Prozess[0][0] = $ob.Caption $Prozess[0][1] = $ob.ProcessId $Prozess[0][2] = $ob.ParentProcessId If (Not $Error) Then If $ob.GetOwner($sU, $Us) = 0 Then $Prozess[0][3] = $sU & '\' & $Us EndIf $Prozess[0][4] = $ob.Priority $Prozess[0][5] = $ob.ExecutablePath $Prozess[0][6] = $ob.WriteTransferCount $Prozess[0][7] = $ob.WorkingSetSize EndIf Next Return $Prozess Case 1 Local $Prozess[$co.Count - 1][3] $i = 0 For $ob In $co If $i Then $Prozess[$i - 1][0] = $ob.Caption $Prozess[$i - 1][1] = $ob.ProcessId $Prozess[$i - 1][2] = $ob.ExecutablePath EndIf $i += 1 Next Return $Prozess Case 2 Local $Prozess[$co.Count - 1][8] $i = 0 For $ob In $co If $i >= 1 Then $Prozess[$i - 1][0] = $ob.Caption $Prozess[$i - 1][1] = $ob.ProcessId $Prozess[$i - 1][2] = $ob.ParentProcessId If (Not $Error) Then If $ob.GetOwner($sU, $Us) = 0 Then $Prozess[$i - 1][3] = $sU & '\' & $Us EndIf $Prozess[$i - 1][4] = $ob.Priority $Prozess[$i - 1][5] = $ob.ExecutablePath $Prozess[$i - 1][6] = $ob.WriteTransferCount $Prozess[$i - 1][7] = $ob.WorkingSetSize EndIf $i += 1 Next Return $Prozess EndSwitch EndFunc ;==>New_Prozess Func LA_Services($ComputerName) Local $ServSet = ObjGet('winmgmts:{impersonationLevel=impersonate}!//' & $ComputerName) Local $ob = $ServSet.InstancesOf('win32_service') If Not IsObj($ob) Then MsgBox(0, 'Error', 'Fehler, Objekt konnte nicht erstellt werden' & @CRLF & 'Programm wird beendet!') Exit EndIf Local $obDienste[$ob.Count][10] $i = 0 For $Serv In $ob $obDienste[$i][0] = $Serv.Name If ($Serv.ProcessID <> 0) Then $obDienste[$i][1] = $Serv.ProcessID Switch $Serv.acceptPause Case True $obDienste[$i][2] = ' Ja ' Case Else $obDienste[$i][2] = ' Nein ' EndSwitch Switch $Serv.acceptStop Case True $obDienste[$i][3] = ' Ja ' Case Else $obDienste[$i][3] = ' Nein ' EndSwitch $obDienste[$i][4] = StringReplace($Serv.PathName, '"', '') $obDienste[$i][5] = $Serv.Status Switch $Serv.State Case 'Running' $obDienste[$i][6] = ' Wird ausgeführt ' Case Else $obDienste[$i][6] = ' Beendet ' EndSwitch $obDienste[$i][7] = $Serv.StartMode $obDienste[$i][8] = StringProper($Serv.StartName) $obDienste[$i][9] = $Serv.Caption $i += 1 Next Return $obDienste EndFunc ;==>LA_Services Func _Services_Running($Dienst) ;Startet ein Service Local $co $co = $obWMI.ExecQuery('Select * from Win32_Service WHERE name = "' & $Dienst & '"') If Not IsObj($co) Then Return SetError(1, 1, -1) For $ob In $co Return _Service_Error($ob.StartService()) Next EndFunc ;==>_Services_Running Func _Services_Stopp($Dienst) ;Beendet ein Service Local $co $co = $obWMI.ExecQuery('Select * from Win32_Service WHERE name = "' & $Dienst & '"') If Not IsObj($co) Then Return SetError(1, 1, -1) For $ob In $co Return _Service_Error($ob.StopService()) Next EndFunc ;==>_Services_Stopp Func QuickSort(ByRef $Array, ByRef $LB, ByRef $UB) Local $P1, $P2, $Ref, $Temp $P1 = $LB $P2 = $UB $Ref = $Array[Int(($P1 + $P2) / 2)] Do While ($Array[$P1] < $Ref) $P1 += 1 WEnd While ($Array[$P2] > $Ref) $P2 -= 1 WEnd If ($P1 <= $P2) Then $Temp = $Array[$P1] $Array[$P1] = $Array[$P2] $Array[$P2] = $Temp $P1 += 1 $P2 -= 1 EndIf Until ($P1 > $P2) If ($LB < $P2) Then QuickSort($Array, $LB, $P2) If ($P1 < $UB) Then QuickSort($Array, $P1, $UB) EndFunc ;==>QuickSort Func _ObjektAr2DDubDel(ByRef $avArray) Local $ScripDict = ObjCreate('Scripting.Dictionary') If @error Then Return SetError(1, 1, -1) Local $iTmp Local $TmpArray Local $iTmp_Save Local $TmpArrayReturn[1][2] Local $iEnd = UBound($avArray) Local $1D2D = UBound($avArray, 2) If @error = 2 Then For $For In $avArray If Not $ScripDict.Exists($For) Then $ScripDict.Add($For, 0).RemoveAll Next $avArray = $ScripDict.Keys() Return ($iEnd - UBound($avArray)) Else For $1D = 0 To $iEnd - 1 $TmpArray &= '|' For $2D = 0 To $1D2D - 1 $TmpArray &= $avArray[$1D][$2D] Next Next $TmpArray = StringSplit(StringTrimLeft($TmpArray, 1), '|') For $i = 1 To UBound($TmpArray) - 1 $iTmp = $TmpArray[$i] If Not $ScripDict.Exists($iTmp) Then $ScripDict.Add($iTmp, 0).RemoveAll $iTmp_Save &= '|' & $i - 1 EndIf Next $1D = 0 $TmpArray = '' $TmpArray = StringSplit(StringTrimLeft($iTmp_Save, 1), '|') If ($TmpArray[0] = $iEnd) Then Return ($iEnd - $TmpArray[0]) ReDim $TmpArrayReturn[$TmpArray[0]][$1D2D] For $i = 1 To UBound($TmpArray) - 1 For $2D = 0 To $1D2D - 1 $TmpArrayReturn[$1D][$2D] = $avArray[$TmpArray[$i]][$2D] Next $1D += 1 Next $avArray = $TmpArrayReturn Return ($iEnd - $1D) EndIf EndFunc ;==>_ObjektAr2DDubDel Func StartCallback() Local $DCHwnd = DllCallbackRegister('DetailFensterList', 'int', 'hwnd;lparam') DllCall('user32.dll', 'int', 'EnumWindows', 'ptr', DllCallbackGetPtr($DCHwnd), 'lparam', 10) If @error Then Return SetError(1, 0, -1) DllCallbackFree($DCHwnd) $aDFL[0][0] = ($Cont - 1) $Cont = 1 Return $aDFL EndFunc ;==>StartCallback Func DetailFensterList($HWnd, $lParam) #forceref $lParam $DCN = DllCall('user32.dll', 'uint', 'GetClassNameW', 'hwnd', $HWnd, 'wstr', '', 'uint', $Max) If @error Then Return SetError(1, 0, -1) If WinGetTitle($HWnd) And BitAND(WinGetState($HWnd), 2) And Not StringInStr($Not_Klassenname, $DCN[2]) Then $GWMFN = DllCall('user32.dll', 'uint', 'GetWindowModuleFileNameW', 'hwnd', $HWnd, 'wstr', '', 'uint', $Max) If @error Then Return SetError(1, 0, -2) $aDFL[$Cont][0] = $HWnd $aDFL[$Cont][1] = WinGetTitle($HWnd) $aDFL[$Cont][2] = $DCN[2] $aDFL[$Cont][3] = WinGetProcess($HWnd) $aDFL[$Cont][4] = $GWMFN[2] $Cont += 1 EndIf Return True EndFunc ;==>DetailFensterList Func IsInArray(Const $sArray, Const $sItem = '', Const $iDim = 0, $nStart = 0, $nEnd = 0, Const $case = 0, Const $iFlag = 0) If Not IsArray($sArray) Or Not $sItem Or (UBound($sArray, 0) > 2) Then Return SetError(1, 0, -1) If IsMissing($nEnd) Then $nEnd = UBound($sArray) If ($nStart > $nEnd) Then $nStart = 0 If Not UBound($sArray, 2) Then For $i = $nStart To $nEnd - 1 If Not StringCompare($sArray[$i], $sItem, $case) Then Return IIF(Not $iFlag, True, $i) Next Else If ($iDim > (UBound($sArray, 2) - 1)) Then Return SetError(1, 0, -2) For $i = $nStart To $nEnd - 1 If Not StringCompare($sArray[$i][$iDim], $sItem, $case) Then Return IIF(Not $iFlag, True, $i) Next EndIf Return False EndFunc ;==>IsInArray Func IIF($V_Expr, $F_True = True, $F_False = False) If $V_Expr Then Return $F_True Return $F_False EndFunc ;==>IIF Func IsMissing(Const $iData) Return (Not $iData) EndFunc ;==>IsMissing Func StringProper($s_String) Local $iX = 0 Local $CapNext = 1 Local $s_nStr = "" Local $s_CurChar For $iX = 1 To StringLen($s_String) $s_CurChar = StringMid($s_String, $iX, 1) Select Case $CapNext = 1 If StringRegExp($s_CurChar, '[a-zA-ZÀ-ÿšœžŸ]') Then $s_CurChar = StringUpper($s_CurChar) $CapNext = 0 EndIf Case Not StringRegExp($s_CurChar, '[a-zA-ZÀ-ÿšœžŸ]') $CapNext = 1 Case Else $s_CurChar = StringLower($s_CurChar) EndSelect $s_nStr &= $s_CurChar Next Return $s_nStr EndFunc ;==>StringProper Func StringToDate($Date) Return (StringMid($Date, 5, 2) & '/' & StringMid($Date, 7, 2) & '/' & StringLeft($Date, 4) & ' ' & StringMid($Date, 9, 2) & ':' & StringMid($Date, 11, 2) & ':' & StringMid($Date, 13, 2)) EndFunc ;==>StringToDate Func _Service_Error($Error) ; Error Handle Local $Rerurn Switch $Error Case 0 $Rerurn = 'Erfolg' Case 1 $Rerurn = 'Nicht unterstützt' Case 2 $Rerurn = 'Zugriff verweigert' Case 3 $Rerurn = 'Abhängige Dienste werden ausgeführt' Case 4 $Rerurn = 'Invalid Service Control Ungültige Service Control' Case 5 $Rerurn = 'Service Control kann nicht akzeptieren' Case 6 $Rerurn = 'Service ist nicht aktiv' Case 7 $Rerurn = 'Service Request timeout' Case 8 $Rerurn = 'Unbekannter Fehler' Case 9 $Rerurn = 'Pfad nicht gefunden' Case 10 $Rerurn = 'Service bereits gestoppt' Case 11 $Rerurn = 'Service Datenbank gesperrt' Case 12 $Rerurn = 'Service Dependency Deleted' Case 13 $Rerurn = 'Service Dependency Failure' Case 14 $Rerurn = 'Service für Behinderte' Case 15 $Rerurn = 'Service Fehler bei der Anmeldung' Case 16 $Rerurn = 'Service zum Löschen markiert' Case 17 $Rerurn = 'Service Nr. Thread' Case 18 $Rerurn = 'Status Circular Dependency' Case 19 $Rerurn = 'Status Duplicate Name' Case 20 $Rerurn = 'Status - Ungültiger Name' Case 21 $Rerurn = 'Status - Ungültiger Parameter' Case 22 $Rerurn = 'Status - Invalid Service Account' Case 23 $Rerurn = 'Status - Dienst existiert' Case 24 $Rerurn = 'Service bereits angehalten' EndSwitch Return $Rerurn EndFunc ;==>_Service_Error Func Com_Fehler() Switch $Com_Fehler Case 0 $Error = True Case Else $Error = False EndSwitch EndFunc ;==>Com_Fehler