Funktionen zum Abrufen von Informationen über ein Prozess oder zum Ausführen verschiedener Operationen an einem Prozess. Klicken Sie auf einen Funktionsnamen, um mehr zu erfahren.
Funktion | Beschreibung |
---|---|
ProcessClose | Erzwingt die Schließung des ersten gefundenen Prozesses. |
ProcessExist | Prüft, ob ein bestimmter Prozess existiert. |
ProcessGetName | Gibt den Namen eines bestimmten Prozesses zurück. |
ProcessGetParent | Gibt die Prozess-ID (PID) des Prozesses zurück, der einen bestimmten Prozess erstellt hat. |
ProcessGetPath | Gibt den Pfad eines bestimmten Prozesses zurück. |
ProcessSetPriority | Ändert die Prioritätsstufe des ersten gefundenen Prozesses. |
ProcessWait | Wartet, bis ein bestimmter Prozess existiert. |
ProcessWaitClose | Wartet, bis alle gefundenen Prozesse geschlossen sind. |
Prozessliste: Obwohl es keine ProcessList-Funktion gibt, zeigen Beispiel #1 und Beispiel #2, wie eine Liste von Prozessen via DllCall oder COM abgerufen werden kann.
Run, WinClose, WinKill, WinWait, WinWaitClose, WinExist, Win-Funktionen
Zeigt eine Liste von allen laufenden Prozessen an, die via DllCall abgerufen wurde.
d := " | " ; Zeichenkette als Trennung s := 4096 ; Größe der Pufferspeicher und Arrays (4 KB) SkriptPID := ProcessExist() ; Die PID des laufenden Skripts. ; Handle dieses Skripts mit PROCESS_QUERY_INFORMATION (0x0400) abrufen: h := DllCall("OpenProcess", "UInt", 0x0400, "Int", false, "UInt", SkriptPID, "Ptr") ; Ein einstellbares Zugriffstoken mit diesem Prozess öffnen (TOKEN_ADJUST_PRIVILEGES = 32): DllCall("Advapi32.dll\OpenProcessToken", "Ptr", h, "UInt", 32, "PtrP", &t := 0) ; Die lokale eindeutige ID der Debug-Berechtigung abrufen: DllCall("Advapi32.dll\LookupPrivilegeValue", "Ptr", 0, "Str", "SeDebugPrivilege", "Int64P", &luid := 0) ti := Buffer(16, 0) ; Struktur mit Berechtigungen NumPut( "UInt", 1 ; Einen Eintrag in das Berechtigungen-Array einfügen ... , "Int64", luid , "UInt", 2 ; Diese Berechtigung aktivieren: SE_PRIVILEGE_ENABLED = 2 , ti) ; Die Berechtigungen dieses Prozesses mit dem neuen Zugriffstoken aktualisieren: r := DllCall("Advapi32.dll\AdjustTokenPrivileges", "Ptr", t, "Int", false, "Ptr", ti, "UInt", 0, "Ptr", 0, "Ptr", 0) DllCall("CloseHandle", "Ptr", t) ; Zugriffstoken-Handle schließen, um Speicher freizugeben. DllCall("CloseHandle", "Ptr", h) ; Prozess-Handle schließen, um Speicher freizugeben. hModule := DllCall("LoadLibrary", "Str", "Psapi.dll") ; Performanz durch Vorabladen der Bibliothek erhöhen. a := Buffer(s) ; Ein Array zum Speichern der Liste von Prozess-IDs: c := 0 ; Zähler für die Prozess-IDs l := "" DllCall("Psapi.dll\EnumProcesses", "Ptr", a, "UInt", s, "UIntP", &r) Loop r // 4 ; Array für IDs als DWORDs (32 Bit) parsen: { id := NumGet(a, A_Index * 4, "UInt") ; Prozess öffnen mit: PROCESS_VM_READ (0x0010) | PROCESS_QUERY_INFORMATION (0x0400) h := DllCall("OpenProcess", "UInt", 0x0010 | 0x0400, "Int", false, "UInt", id, "Ptr") if !h continue n := Buffer(s, 0) ; Ein Puffer zum Speichern des Basisnamens des Moduls: e := DllCall("Psapi.dll\GetModuleBaseName", "Ptr", h, "Ptr", 0, "Ptr", n, "UInt", s//2) if !e ; Fallback-Methode für 64-Bit-Prozesse, wenn im 32-Bit-Modus: e := DllCall("Psapi.dll\GetProcessImageFileName", "Ptr", h, "Ptr", n, "UInt", s//2) SplitPath StrGet(n), &n DllCall("CloseHandle", "Ptr", h) ; Prozess-Handle schließen, um Speicher freizugeben. if (n && e) ; Wenn Image ungleich Null ist, zur Liste hinzufügen: l .= n "`n", c++ } DllCall("FreeLibrary", "Ptr", hModule) ; Bibliothek entladen, um Speicher freizugeben. ;l := Sort(l) ; Entkommentiere diese Zeile, um die Liste alphabetisch zu sortieren. MsgBox StrReplace(l, "`n", d), c " Prozesse", 0
Zeigt eine Liste von allen laufenden Prozessen an, die via COM und Win32_Process abgerufen wurde.
MeineGui := Gui(, "Prozessliste") LV := MeineGui.Add("ListView", "x2 y0 w400 h500", ["Prozessname","Befehlszeile"]) for Prozess in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process") LV.Add("", Prozess.Name, Prozess.CommandLine) MeineGui.Show