在Python中检测Windows注销

时间:2008-12-13 09:55:16

标签: python winapi

如何在python中注销Windows时如何检测或收到通知?

编辑: Martinv.Löwis的答案很好,并且可以完全注销,但它不能用于“快速用户切换”事件,例如按下win + L,这是我真正需要的。

编辑:我不使用gui这是作为服务运行

2 个答案:

答案 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库。