检测桌面是否已锁定

时间:2009-04-20 13:42:14

标签: winapi desktop

  

可能重复:
  How can I programmatically determine if my workstation is locked?

确定桌面是否已锁定当前登录用户的最佳方法是什么?我查看了MSDN,找不到任何API调用来检测它。我错过了什么,或者我没有简单的电话可以使用吗?

4 个答案:

答案 0 :(得分:14)

答案取决于您是想知道桌面是否已锁定现在,或者是否希望在桌面锁定(并且可能是解锁)时收到通知。这还取决于您计划如何接收所述通知。

  • 如果你真的想进行一次性测试,那么答案here会使用OpenDesktop()SwitchDesktop()来打开默认桌面的句柄并激活它 - 如果这样然后失败就是桌面现在被锁定的一个好兆头。

  • 如果您想要锁定/解锁通知,并且您有一个带窗口和消息泵的用户模式应用程序,那么您需要调用WTSRegisterSessionNotification()并捕获WM_WTSSESSION_CHANGE消息

  • 如果您需要通知,并且您作为Windows服务运行,则可以通过调用SetServiceStatus()并将SERVICE_ACCEPT_SESSIONCHANGE添加到dwControlsAccepted来注册会话更改事件你的状态结构。然后,当dwControl设置为SERVICE_CONTROL_SESSIONCHANGE时,您将收到自己的服务控制HandlerEx()功能的回调。

答案 1 :(得分:0)

您可以挂钩WM_WTSSESSION_CHANGE消息

答案 2 :(得分:0)

您可以将WTSRegisterSessionNotification与WTS_SESSION_LOCK

一起使用

答案 3 :(得分:0)

以前的答案是错误的(状态变化)
使用WTS api(已锁定)
它在Windows内部使用。始终在Win32 group上查看Windows内部(MS)