Process-Funktionen

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.

Bemerkungen

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

Beispiele

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