Обнаружение выхода из Windows в Python - PullRequest
5 голосов
/ 13 декабря 2008

Как я могу обнаружить или получить уведомление, когда Windows выходит из системы в Python?

Edit: Ответ Martin v. Löwis хорош и работает для полного выхода из системы, но он не работает для события «быстрого переключения пользователя», такого как нажатие win + L, для которого я действительно нуждаюсь

Изменить: я не использую графический интерфейс, это работает как служба

Ответы [ 2 ]

6 голосов
/ 13 декабря 2008

Вы можете обнаружить события быстрого переключения пользователей, используя API служб терминалов, к которому вы можете получить доступ из Python, используя модуль win32ts из pywin32 . В приложении с графическим интерфейсом вызовите WTSRegisterSessionNotification для получения уведомительных сообщений, WTSUnRegisterSessionNotification , чтобы прекратить получать уведомления, и обработайте сообщение WM_WTSSESSION_CHANGE в вашей оконной процедуре.

Если вы пишете службу Windows на Python, используйте функцию RegisterServiceCtrlHandlerEx для обнаружения событий быстрого переключения пользователей. Это доступно в библиотеке pywin32 как функция RegisterServiceCtrlHandler в модуле servicemanager. В функции обработчика найдите уведомление SERVICE_CONTROL_SESSIONCHANGE. См. Также WM_WTSSESSION_CHANGE документацию для получения подробной информации о конкретных кодах уведомлений.

В этой ветке есть еще несколько подробностей из списка рассылки python-win32, которые могут быть полезны.

Надеюсь, это поможет!

3 голосов
/ 13 декабря 2008

В консольном приложении вы можете использовать win32api.SetConsoleCtrlHandler и искать CTRL_LOGOFF_EVENT. В приложении с графическим интерфейсом вам нужно открыть окно и дождаться сообщения WM_QUERYENDSESSION. Насколько точно это работает (и работает ли оно вообще), зависит от вашей библиотеки GUI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...