by effel » 02 Aug 2020, 09:38
mit den folgenden Codezeilen kannst du die laufenden Prozesse vor, während und nach dem Start der obs Software speichern.
Vergleich die Textfiles miteinander. Vielleicht findest du die Prozesse so
https://ahkde.github.io/docs/commands/Process.htm#ListEx
Code: Select all
; Beispiel #4: Ermittelt eine Liste von allen laufenden Prozessen via DllCall und zeigt sie dann in einer Message Box an.
; `n
; d := " | " ; Zeichenkette-Trennzeichen
d := "`n" ; Zeichenkette-Trennzeichen
s := 4096 ; Größe der Puffer und Arrays (4 KB)
Process, Exist ; Setzt ErrorLevel auf die PID des laufenden Skripts
; Ermittelt den Handle des Skripts mit PROCESS_QUERY_INFORMATION (0x0400)
h := DllCall("OpenProcess", "UInt", 0x0400, "Int", false, "UInt", ErrorLevel, "Ptr")
; Öffnet einen anpassbaren Zugriffstoken mit diesem Prozess (TOKEN_ADJUST_PRIVILEGES = 32)
DllCall("Advapi32.dll\OpenProcessToken", "Ptr", h, "UInt", 32, "PtrP", t)
VarSetCapacity(ti, 16, 0) ; Struktur mit Berechtigungen
NumPut(1, ti, 0, "UInt") ; Setzt einen Eintrag in das Array mit Berechtigungen ...
; Ermittelt den lokalen eindeutigen Identifikator der Debug-Berechtigung:
DllCall("Advapi32.dll\LookupPrivilegeValue", "Ptr", 0, "Str", "SeDebugPrivilege", "Int64P", luid)
NumPut(luid, ti, 4, "Int64")
NumPut(2, ti, 12, "UInt") ; Aktiviert diese Berechtigung: SE_PRIVILEGE_ENABLED = 2
; Aktualisiert die Berechtigungen des Prozesses mit dem neuen Zugriffstoken:
DllCall("Advapi32.dll\AdjustTokenPrivileges", "Ptr", t, "Int", false, "Ptr", &ti, "UInt", 0, "Ptr", 0, "Ptr", 0)
DllCall("CloseHandle", "Ptr", t) ; Schließt diesen Zugriffstoken-Handle, um Speicher freizugeben.
DllCall("CloseHandle", "Ptr", h) ; Schließt diesen Prozess-Handle, um Speicher freizugeben.
hModule := DllCall("LoadLibrary", "Str", "Psapi.dll") ; Erhöht die Performance durch Vorausladen der Library.
s := VarSetCapacity(a, s) ; Ein Array, in der die Liste der Prozessidentifikatoren gespeichert wird:
c := 0 ; Zähler für die Prozess-IDs
DllCall("Psapi.dll\EnumProcesses", "Ptr", &a, "UInt", s, "UIntP", r)
Loop, % r // 4 ; Parst das Array mit Identifikatoren als DWORDs (32 Bit):
{
id := NumGet(a, A_Index * 4, "UInt")
; Öffnet Prozess mit: PROCESS_VM_READ (0x0010) | PROCESS_QUERY_INFORMATION (0x0400)
h := DllCall("OpenProcess", "UInt", 0x0010 | 0x0400, "Int", false, "UInt", id, "Ptr")
if !h
continue
VarSetCapacity(n, s, 0) ; Ein Puffer, in dem der Basisname des Moduls gespeichert wird:
e := DllCall("Psapi.dll\GetModuleBaseName", "Ptr", h, "Ptr", 0, "Str", n, "UInt", A_IsUnicode ? s//2 : s)
if !e ; Fallback-Methode für 64-Bit-Prozesse, wenn sie im 32-Bit-Modus sind:
if e := DllCall("Psapi.dll\GetProcessImageFileName", "Ptr", h, "Str", n, "UInt", A_IsUnicode ? s//2 : s)
SplitPath n, n
DllCall("CloseHandle", "Ptr", h) ; Schließt diesen Prozess-Handle, um Speicher freizugeben.
if (n && e) ; Wenn Image nicht null ist, füge es zur Liste hinzu:
l .= n . d, c++
}
DllCall("FreeLibrary", "Ptr", hModule) ; Entlädt die Library, um Speicher freizugeben.
Sort, l, C ; Heben Sie die Kommentierung in dieser Zeile auf, um die Liste alphabetisch zu sortieren.
Fileappend, Anzahl laufende Prozesse:%A_Space%%c%`n%l%, %A_NowUTC%-alle_laufenden_prozesse_anzeigen.txt
; MsgBox, 0, %c% Prozesse, %l%
mit den folgenden Codezeilen kannst du die laufenden Prozesse vor, während und nach dem Start der obs Software speichern.
Vergleich die Textfiles miteinander. Vielleicht findest du die Prozesse so
[c]https://ahkde.github.io/docs/commands/Process.htm#ListEx[/c]
[code]; Beispiel #4: Ermittelt eine Liste von allen laufenden Prozessen via DllCall und zeigt sie dann in einer Message Box an.
; `n
; d := " | " ; Zeichenkette-Trennzeichen
d := "`n" ; Zeichenkette-Trennzeichen
s := 4096 ; Größe der Puffer und Arrays (4 KB)
Process, Exist ; Setzt ErrorLevel auf die PID des laufenden Skripts
; Ermittelt den Handle des Skripts mit PROCESS_QUERY_INFORMATION (0x0400)
h := DllCall("OpenProcess", "UInt", 0x0400, "Int", false, "UInt", ErrorLevel, "Ptr")
; Öffnet einen anpassbaren Zugriffstoken mit diesem Prozess (TOKEN_ADJUST_PRIVILEGES = 32)
DllCall("Advapi32.dll\OpenProcessToken", "Ptr", h, "UInt", 32, "PtrP", t)
VarSetCapacity(ti, 16, 0) ; Struktur mit Berechtigungen
NumPut(1, ti, 0, "UInt") ; Setzt einen Eintrag in das Array mit Berechtigungen ...
; Ermittelt den lokalen eindeutigen Identifikator der Debug-Berechtigung:
DllCall("Advapi32.dll\LookupPrivilegeValue", "Ptr", 0, "Str", "SeDebugPrivilege", "Int64P", luid)
NumPut(luid, ti, 4, "Int64")
NumPut(2, ti, 12, "UInt") ; Aktiviert diese Berechtigung: SE_PRIVILEGE_ENABLED = 2
; Aktualisiert die Berechtigungen des Prozesses mit dem neuen Zugriffstoken:
DllCall("Advapi32.dll\AdjustTokenPrivileges", "Ptr", t, "Int", false, "Ptr", &ti, "UInt", 0, "Ptr", 0, "Ptr", 0)
DllCall("CloseHandle", "Ptr", t) ; Schließt diesen Zugriffstoken-Handle, um Speicher freizugeben.
DllCall("CloseHandle", "Ptr", h) ; Schließt diesen Prozess-Handle, um Speicher freizugeben.
hModule := DllCall("LoadLibrary", "Str", "Psapi.dll") ; Erhöht die Performance durch Vorausladen der Library.
s := VarSetCapacity(a, s) ; Ein Array, in der die Liste der Prozessidentifikatoren gespeichert wird:
c := 0 ; Zähler für die Prozess-IDs
DllCall("Psapi.dll\EnumProcesses", "Ptr", &a, "UInt", s, "UIntP", r)
Loop, % r // 4 ; Parst das Array mit Identifikatoren als DWORDs (32 Bit):
{
id := NumGet(a, A_Index * 4, "UInt")
; Öffnet Prozess mit: PROCESS_VM_READ (0x0010) | PROCESS_QUERY_INFORMATION (0x0400)
h := DllCall("OpenProcess", "UInt", 0x0010 | 0x0400, "Int", false, "UInt", id, "Ptr")
if !h
continue
VarSetCapacity(n, s, 0) ; Ein Puffer, in dem der Basisname des Moduls gespeichert wird:
e := DllCall("Psapi.dll\GetModuleBaseName", "Ptr", h, "Ptr", 0, "Str", n, "UInt", A_IsUnicode ? s//2 : s)
if !e ; Fallback-Methode für 64-Bit-Prozesse, wenn sie im 32-Bit-Modus sind:
if e := DllCall("Psapi.dll\GetProcessImageFileName", "Ptr", h, "Str", n, "UInt", A_IsUnicode ? s//2 : s)
SplitPath n, n
DllCall("CloseHandle", "Ptr", h) ; Schließt diesen Prozess-Handle, um Speicher freizugeben.
if (n && e) ; Wenn Image nicht null ist, füge es zur Liste hinzu:
l .= n . d, c++
}
DllCall("FreeLibrary", "Ptr", hModule) ; Entlädt die Library, um Speicher freizugeben.
Sort, l, C ; Heben Sie die Kommentierung in dieser Zeile auf, um die Liste alphabetisch zu sortieren.
Fileappend, Anzahl laufende Prozesse:%A_Space%%c%`n%l%, %A_NowUTC%-alle_laufenden_prozesse_anzeigen.txt
; MsgBox, 0, %c% Prozesse, %l%
[/code]