可能重复:
如何以编程方式确定我的工作站是否被锁定?
确定当前登录用户是否锁定桌面的最佳方法是什么?我查看了 MSDN,找不到任何 API 调用来检测这一点。我错过了什么,还是没有我可以使用的简单电话?
可能重复:
如何以编程方式确定我的工作站是否被锁定?
确定当前登录用户是否锁定桌面的最佳方法是什么?我查看了 MSDN,找不到任何 API 调用来检测这一点。我错过了什么,还是没有我可以使用的简单电话?
答案取决于您是否想知道桌面现在是否被锁定,或者您是否想在桌面被锁定(并且可能是解锁)时收到通知。这还取决于您计划如何接收所述通知。
如果您真的想要一次性测试,那么这里的答案使用OpenDesktop()
并SwitchDesktop()
打开默认桌面的句柄并激活它 - 如果失败,那么这是桌面现在被锁定的好兆头。
如果您想要关于锁定/解锁的通知,并且您有一个带有窗口和消息泵的用户模式应用程序,那么您需要调用WTSRegisterSessionNotification()
并捕获WM_WTSSESSION_CHANGE
消息。
如果您需要通知,并且您作为 Windows 服务运行,那么您可以通过调用SetServiceStatus()
并添加SERVICE_ACCEPT_SESSIONCHANGE
到dwControlsAccepted
您的状态结构来注册会话更改事件。然后,您将收到对您自己的服务控制HandlerEx()
函数的回调,并将其dwControl
设置为SERVICE_CONTROL_SESSIONCHANGE
。
您可以挂钩WM_WTSSESSION_CHANGE消息
您可以将WTSRegisterSessionNotification 与 WTS_SESSION_LOCK 一起使用
以前的答案是错误的(状态更改)
使用 WTS api(已锁定)
它由 Windows 内部使用。始终在Win32 组上查看 Windows 内部 (MS)