在Python中检测Windows注销
我怎么才能在Python中检测到或者收到Windows注销的通知呢?
补充说明:Martin v. Löwis的回答很好,能处理完整的注销,但对于像按下win+L这样的“快速用户切换”事件就不行了,而我正是需要这个功能。
补充说明:我不是在使用图形界面,这个是在作为服务运行的。
2 个回答
在一个控制台应用程序中,你可以使用win32api.SetConsoleCtrlHandler这个功能,并且要注意CTRL_LOGOFF_EVENT这个事件。而在图形用户界面(GUI)应用程序中,你需要有一个窗口打开,并且要等待WM_QUERYENDSESSION这个消息。具体是怎么运作的(以及是否真的有效)就要看你使用的图形库了。
你可以通过使用终端服务API来检测快速用户切换事件。在Python中,你可以通过pywin32库中的win32ts
模块来访问这个API。在一个图形用户界面(GUI)应用程序中,你需要调用WTSRegisterSessionNotification来接收通知消息,如果你想停止接收通知,就用WTSUnRegisterSessionNotification。同时,你还需要在窗口处理程序中处理WM_WTSSESSION_CHANGE
消息。
如果你是在Python中编写Windows服务,可以使用RegisterServiceCtrlHandlerEx
函数来检测快速用户切换事件。在pywin32库中,这个功能对应的是servicemanager
模块里的RegisterServiceCtrlHandler
函数。在你的处理函数中,查找SERVICE_CONTROL_SESSIONCHANGE
通知。具体的通知代码可以参考WM_WTSSESSION_CHANGE
的文档。
在这个讨论串中还有更多细节,可能对你有帮助。
希望这些信息能帮到你!