如何在python中注销Windows时如何检测或收到通知?
编辑:
Martinv.Löwis的答案很好,并且可以完全注销,但它不能用于“快速用户切换”事件,例如按下win + L,这是我真正需要的。
编辑:我不使用gui这是作为服务运行
答案 0 :(得分:6)
您可以使用终端服务API检测快速用户切换事件,您可以使用pywin32中的win32ts
模块从Python访问该API。在GUI应用程序中,调用WTSRegisterSessionNotification以接收通知消息,WTSUnRegisterSessionNotification以停止接收通知,并在窗口过程中处理WM_WTSSESSION_CHANGE
消息。
如果您使用Python编写Windows服务,请使用RegisterServiceCtrlHandlerEx
函数检测快速用户切换事件。这在pywin32库中可用作RegisterServiceCtrlHandler
模块中的servicemanager
函数。在handler function中,查找SERVICE_CONTROL_SESSIONCHANGE
通知。有关特定通知代码的详细信息,另请参阅WM_WTSSESSION_CHANGE
文档。
来自python-win32邮件列表的this thread中有一些更详细的信息,这可能很有用。
我希望这有帮助!
答案 1 :(得分:3)
在控制台应用程序中,您可以使用win32api.SetConsoleCtrlHandler并查找CTRL_LOGOFF_EVENT。在GUI应用程序中,您需要打开一个窗口并等待WM_QUERYENDSESSION消息。它的精确程度(以及它是否有效)取决于您的GUI库。