在作为本地系统帐户运行时检测 Windows 设备是否被锁定

时间:2021-06-10 15:21:38

标签: c++ winapi

通常可以使用 SHQueryUserNotificationState API 检查桌面是否被锁定,但是当作为 LocalSystem 运行时,无法正确检测到状态。

是否有人知道可用于检测设备是否被锁定的任何变通方法或替代 API?

1 个答案:

答案 0 :(得分:1)

SHQueryUserNotificationState() 查询调用用户的桌面会话状态。但是可以同时登录多个用户。因此,您必须查询您感兴趣的特定用户会话。

您可以使用 WTEnumerateSessions() 查看正在运行的用户会话,然后使用 WTSQuerySessionInformation(WTSSessionInfoEx) 查询所需的用户会话以获取其 WTSINFOEX_LEVEL1 会话信息,其中包含 {{1}如果会话被锁定,将被设置为 SessionFlags 的成员。

或者,您可以通过监听来自 WM_WTSSESSION_CHANGEWTSRegisterSessionNotification() 消息,让您的应用实时跟踪会话锁定/解锁。或者,您可以编写一个单独的后台服务来侦听 WTS_SESSIONSTATE_LOCK 通知,然后根据需要通过您选择的 IPC 机制通知您的主应用。