可能重复:
How can I programmatically determine if my workstation is locked?
确定桌面是否已锁定当前登录用户的最佳方法是什么?我查看了MSDN,找不到任何API调用来检测它。我错过了什么,或者我没有简单的电话可以使用吗?
答案 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)