【问题标题】:Detect windows logout in Python在Python中检测Windows注销
【发布时间】:2008-12-13 09:55:16
【问题描述】:

当 windows 在 python 中注销时,我如何检测或收到通知?

编辑: Martin v. Löwis 的回答很好,适用于完全注销,但不适用于“快速用户切换”事件,例如按 win+L,这是我真正需要的。

编辑:我没有使用作为服务运行的 gui

【问题讨论】:

    标签: python winapi


    【解决方案1】:

    您可以使用终端服务 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 中有更多详细信息,可能有用。

    我希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      在控制台应用程序中,您可以使用 win32api.SetConsoleCtrlHandler 并查找 CTRL_LOGOFF_EVENT。在 GUI 应用程序中,您需要打开一个窗口并等待 WM_QUERYENDSESSION 消息。其工作的精确程度(以及是否有效)取决于您的 GUI 库。

      【讨论】:

      • 据我所知,win32api 也可以在 wxpython 应用程序中使用。无论如何,我无法达到这个模块(win32)的最高能力......
      • 这似乎大部分都有效,但是即使你按下 win+l,它也不会获得“快速用户切换”,有什么想法吗?
      猜你喜欢
      • 2013-10-12
      • 2011-10-11
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多