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