Есть ли способ автоматически закрыть программу в 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