Wie beende ich ein Programm automatisch, wenn ich unter Windows 7 den Bildschirm sperre?

Wie beende ich ein Programm automatisch, wenn ich unter Windows 7 den Bildschirm sperre?

Gibt es eine Möglichkeit, ein Programm unter Windows 7 automatisch zu beenden, wenn ich den Bildschirm sperre?

Antwort1

Gemäß dem Vorschlag von Grawity,benutze nicht die Batchdatei, die ich eingefügt habeam Ende dieser Antwort. Dies liegt daran,rundll32.exe nichtentsprechen der Aufrufkonvention der LockWorkStationWin32-API-Funktion (siehedieser MSDN-Blogeintragfür Details). Allerdings gibt es eine bessere Alternative, die nicht allzu viel Arbeit erfordert.

Du kannst den ... benutzenAutoIt-Skriptspracheund dasDllCall-Funktion, um eine Win32-API-Funktion aufzurufen, ohne den Aufrufstapel zu beschädigen. Sie können auch dieProcessCloseanstelle von TASKKILL. Zu Ihrer Information:Hier ist dasLockWorkStationReferenz aus dem MSDN.

Fügen Sie die folgenden zwei Zeilen in eine Datei ein und speichern Sie sie unter exitandlock.au3(oder etwas Ähnlichem). Sie können sie dann mit AutoIt ausführen (oder sogar in eine EXE-Datei kompilieren, wenn Sie möchten).

ProcessClose("yourapp.exe")
DllCall("user32.dll", "BOOL", "LockWorkStation")

Damit sollten Sie das gewünschte Ergebnis erhalten, ohne den Aufrufstapel zu beschädigen. Sie können diese Datei dann an einen Hotkey binden und damit Ihre Workstation sperren. Alternativ können Sie sie in eine EXE-Datei kompilieren und sie so einrichten, dass sie als geplante Aufgabe ausgeführt wird, nachdem Ihr Computer inaktiv ist.

Schließlich können Sie auch dieWinCloseFunktion als Alternative zu ProcessClose.


Wie gesagt, bitteVerwenden Sie diese Methode nicht. Ich belasse es hier nur der Vollständigkeit halber, da dies eine der am häufigsten verwendeten Methoden im Internet ist. Sie können dazu eine einfache Batchdatei mit dem folgenden TASKKILLBefehl verwenden:

@ECHO OFF
TASKKILL /IM yourapp.exe
Rundll32.exe User32.dll,LockWorkStation

Führen Sie dann einfach die Batchdatei aus, wenn Sie Ihre Workstation sperren möchten. Alternativ können Sie auch einen Hotkey zum Ausführen der Batchdatei zuweisen und dann einfach diese Tastenkombination drücken, wenn Sie sie sperren möchten. Weitere Einzelheiten zum TASKKILLBefehl finden Sie unterdieser Artikel von Microsoft.

Antwort2

Schritt 1: Schreiben Sie ein Skript, das das Programm beendet

Erstellen Sie eine Datei terminate.vbsmit diesem Namen und Inhalt:

set objwmiservice = getobject("winmgmts:\\.\root\cimv2")
strprocessname = wscript.arguments.item(0)
strquery = "select * from win32_process where name='" & strprocessname & "'"
set colitems = objwmiservice.execquery(strquery,,48)
for each objitem in colitems
    objitem.terminate
next

Testen Sie dieses Skript, indem Sie eine Eingabeaufforderung öffnen und ausführen cscript.exe "C:\path\to\terminate.vbs" notepad.exe. Ersetzen Sie notepad.exedurch den Namen des Prozesses, den Sie beenden möchten.

Schritt 2: Planen Sie die Ausführung des Skripts, wenn Sie den Bildschirm sperren

OffenAufgabenplanung(Sie können im Startmenü danach suchen), klicken Sie mit der rechten MaustasteAufgabenplaner-Bibliothekund wählen SieAufgabe erstellen.... Auf derAllgemeinGeben Sie Ihrer Aufgabe einen Namen und eine Beschreibung. Sie könnenKonfigurieren für:ZuWindows 7, Windows Server 2008 R2wenn Sie möchten, aber das ist nicht notwendig.

Aufgabe erstellen – Registerkarte „Allgemein“

Auf derLöst ausRegisterkarte, erstellen Sie einen neuen Trigger und legen Sie festBeginnen Sie mit der Aufgabe:ZuZum Sperren der Arbeitsstation. Die restlichen Standardeinstellungen sind in Ordnung.

Aufgabe erstellen – Neuer Trigger

Auf derAktionenerstellen Sie eine neue Aktion, dieStarten Sie ein Programm.Programm/Skript:sollte seincscript.exeGeben Sie den Pfad terminate.vbsund den Namen des Prozesses ein, den Sie beenden möchten, in dasArgumente hinzufügen (optional):Meine Argumente sind"C:\Users\Public\Documents\terminate.vbs" notepad.exe

Aufgabe erstellen – Neue Aktion

Sie können dieBedingungenUndEinstellungenRegisterkarten für weitere Optionen, aber keine davon ist hier erforderlich. Speichern Sie die Aufgabe, und Sie sind fertig. Wenn Sie den Bildschirm sperren, sollte der Vorgang beendet werden.

Beachten Sie, dass beim Sperren und anschließenden schnellen Entsperren des Bildschirms möglicherweise ein Eingabeaufforderungsfenster angezeigt wird oder dass der Prozess, den Sie beenden möchten, noch beendet wird. Dies hängt davon ab, wie lange es dauert, bis der Prozess ordnungsgemäß beendet wird.

Antwort3

Sie können ein Programm schreiben, das WTSRegisterSessionNotification()auf Folgendes wartet:WTS_SESSION_LOCKVeranstaltungen und erledigen Sie die notwendigen Dinge.

Ein Beispiel finden Sie unter:https://superuser.com/a/264973/1686

verwandte Informationen