Обнаружение выхода из Windows в Python

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

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

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

13.12.2008 09:55:16
2 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

6
13.12.2008 14:27:56

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

3
13.12.2008 10:50:02
Как я знаю, win32api можно использовать и в приложениях wxpython. Во всяком случае, я не могу достичь вершины способностей этого модуля (win32) ...
Kirill Titov 13.12.2008 11:13:45
Похоже, что это в основном работает, но не дает «быстрого переключения пользователей», даже если вы нажмете win + l, есть идеи?
UnkwnTech 13.12.2008 11:45:23