2 Fenster auf 2.ten Desktop schliesen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

dartomania
Posts: 5
Joined: 24 Jan 2020, 03:59

2 Fenster auf 2.ten Desktop schliesen

Post by dartomania » 01 Aug 2020, 18:05

Moin moin

Ich nutze zur Zeit auf meinem Handy macro Deck.
Und auf dem PC 2 mal obs.
Jetzt möchte ich gerne mit nur einem Button im macro Deck beide obs Instanzen schließen.
Wie bewerstelle ich das am besten?

Habs schon mit einer bat Datei versucht, aber diese schließt mir immer nur ein obs.
Im Taskmanager wird auch 2 mal die obs.exe angezeigt.

effel
Posts: 546
Joined: 16 Jan 2018, 13:34

Re: 2 Fenster auf 2.ten Desktop schliesen

Post by effel » 02 Aug 2020, 00:37

versuch mal

Code: Select all

loop, 2
{
Process, Exist, obs.exe
PID := Errorlevel
Process, Close, %PID%
}

dartomania
Posts: 5
Joined: 24 Jan 2020, 03:59

Re: 2 Fenster auf 2.ten Desktop schliesen

Post by dartomania » 02 Aug 2020, 08:11

leider geht es nicht.
auch mit der richtigen schreibweise (obs64.exe) klappt es nicht.

effel
Posts: 546
Joined: 16 Jan 2018, 13:34

Re: 2 Fenster auf 2.ten Desktop schliesen

Post 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%




Post Reply

Return to “Ich brauche Hilfe”