在Python中检测Windows注销

5 投票
2 回答
3326 浏览
提问于 2025-04-11 21:11

我怎么才能在Python中检测到或者收到Windows注销的通知呢?

补充说明:Martin v. Löwis的回答很好,能处理完整的注销,但对于像按下win+L这样的“快速用户切换”事件就不行了,而我正是需要这个功能。

补充说明:我不是在使用图形界面,这个是在作为服务运行的。

2 个回答

3

在一个控制台应用程序中,你可以使用win32api.SetConsoleCtrlHandler这个功能,并且要注意CTRL_LOGOFF_EVENT这个事件。而在图形用户界面(GUI)应用程序中,你需要有一个窗口打开,并且要等待WM_QUERYENDSESSION这个消息。具体是怎么运作的(以及是否真的有效)就要看你使用的图形库了。

6

你可以通过使用终端服务API来检测快速用户切换事件。在Python中,你可以通过pywin32库中的win32ts模块来访问这个API。在一个图形用户界面(GUI)应用程序中,你需要调用WTSRegisterSessionNotification来接收通知消息,如果你想停止接收通知,就用WTSUnRegisterSessionNotification。同时,你还需要在窗口处理程序中处理WM_WTSSESSION_CHANGE消息。

如果你是在Python中编写Windows服务,可以使用RegisterServiceCtrlHandlerEx函数来检测快速用户切换事件。在pywin32库中,这个功能对应的是servicemanager模块里的RegisterServiceCtrlHandler函数。在你的处理函数中,查找SERVICE_CONTROL_SESSIONCHANGE通知。具体的通知代码可以参考WM_WTSSESSION_CHANGE的文档。

这个讨论串中还有更多细节,可能对你有帮助。

希望这些信息能帮到你!

撰写回答