6

可能重复:
如何以编程方式确定我的工作站是否被锁定?

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

4

4 回答 4

15

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

  • 如果您真的想要一次性测试,那么这里的答案使用OpenDesktop()SwitchDesktop()打开默认桌面的句柄并激活它 - 如果失败,那么这是桌面现在被锁定的好兆头。

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

  • 如果您需要通知,并且您作为 Windows 服务运行,那么您可以通过调用SetServiceStatus()并添加SERVICE_ACCEPT_SESSIONCHANGEdwControlsAccepted您的状态结构来注册会话更改事件。然后,您将收到对您自己的服务控制HandlerEx()函数的回调,并将其dwControl设置为SERVICE_CONTROL_SESSIONCHANGE

于 2009-04-20T21:25:45.617 回答
0

您可以挂钩WM_WTSSESSION_CHANGE消息

于 2009-04-20T13:47:29.510 回答
0

您可以将WTSRegisterSessionNotification 与 WTS_SESSION_LOCK 一起使用

于 2009-04-20T13:47:53.317 回答
-1

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

于 2009-04-20T18:29:31.157 回答