Как автоматически выйти из программы при блокировке экрана в Windows 7?

Как автоматически выйти из программы при блокировке экрана в Windows 7?

Есть ли способ автоматически закрыть программу в Windows 7 при блокировке экрана?

решение1

Согласно предложению Grawity,не используйте пакетный файл, который я поместилв конце этого ответа. Это потому чтоrundll32.exe несоответствовать соглашению о вызовах LockWorkStationфункции Win32 API (см.эта запись в блоге MSDN(для получения подробной информации) Тем не менее, есть лучшая альтернатива, которая не требует слишком много работы.

Вы можете использоватьЯзык сценариев AutoItиDllCallфункция для вызова функции Win32 API без повреждения стека вызовов. Вы также можете использоватьProcessCloseвместо TASKKILL. Для справки,здесьLockWorkStationссылка из MSDN.

Поместите следующие две строки в файл и сохраните его как exitandlock.au3(или как-то похоже). Затем вы можете запустить его с помощью AutoIt (или даже скомпилировать его в .exe, если хотите).

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

Это должно предоставить вам то, что вы хотите, не повреждая стек вызовов. Затем вы можете привязать этот файл к горячей клавише и использовать ее для блокировки вашей рабочей станции. В качестве альтернативы вы можете скомпилировать его в файл .exe и настроить его на запуск в качестве запланированной задачи после того, как ваш компьютер неактивен.

Наконец, вы также можете использоватьWinCloseфункционировать как альтернатива ProcessClose.


Как я уже сказал, пожалуйста.не используйте этот метод. Я оставил его здесь только для полноты, так как это один из наиболее широко используемых способов в Интернете. Вы можете использовать простой пакетный файл, чтобы сделать это с помощью команды TASKKILL:

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

Затем просто запустите пакетный файл, когда захотите заблокировать свою рабочую станцию. В качестве альтернативы вы также можете назначить горячую клавишу для запуска пакетного файла, а затем просто нажать эту комбинацию клавиш, когда захотите заблокировать ее. Для получения более подробной информации о команде TASKKILLсм.эта статья от Microsoft.

решение2

Шаг 1: Напишите скрипт, который завершит работу программы.

Создайте файл с именем terminate.vbsи следующим содержимым:

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

Протестируйте этот скрипт, открыв командную строку и выполнив cscript.exe "C:\path\to\terminate.vbs" notepad.exe. Замените notepad.exeна имя процесса, который вы хотите завершить.

Шаг 2: Запланируйте запуск скрипта при блокировке экрана

ОткрытьДиспетчер задач(вы можете найти его в меню «Пуск»), щелкните правой кнопкой мышиБиблиотека планировщика задачи выберитеСоздать задачу.... НаОбщийвкладку, дайте вашей задаче имя и описание. Вы можете изменитьНастроить для:кWindows 7, Windows Server 2008 R2если хотите, но это не обязательно.

Создать задачу — вкладка «Общие»

НаТриггерывкладку, создайте новый триггер и установитеНачните выполнение задания:кНа блокировке рабочей станции. Остальные настройки по умолчанию в порядке.

Создать задачу - Новый триггер

НаДействиявкладку, создайте новое действие, которое будетНачать программу.Программа/скрипт:должно бытьcscript.exe. Введите путь terminate.vbsи имя процесса, который вы хотите завершить, вДобавьте аргументы (необязательно):ящик. Мои аргументы таковы"C:\Users\Public\Documents\terminate.vbs" notepad.exe

Создать задачу - Новое действие

Вы можете проверитьУсловияиНастройкивкладки для дополнительных опций, но ни одна из них здесь не нужна. Сохраните задачу, и все готово. Когда вы заблокируете экран, процесс должен завершиться.

Обратите внимание, что если вы заблокируете экран, а затем быстро разблокируете его, вы можете увидеть окно командной строки или процесс, который вы хотите завершить, все еще находящийся в процессе завершения. Это зависит от того, сколько времени потребуется процессу для корректного завершения.

решение3

Вы можете написать программу, которая WTSRegisterSessionNotification()будет ждатьWTS_SESSION_LOCKмероприятия и делать необходимые вещи.

Пример можно найти по адресу:https://superuser.com/a/264973/1686

Связанный контент