通常可以使用 SHQueryUserNotificationState API 检查桌面是否被锁定,但是当作为 LocalSystem 运行时,无法正确检测到状态。
是否有人知道可用于检测设备是否被锁定的任何变通方法或替代 API?
答案 0 :(得分:1)
SHQueryUserNotificationState()
查询调用用户的桌面会话状态。但是可以同时登录多个用户。因此,您必须查询您感兴趣的特定用户会话。
您可以使用 WTEnumerateSessions()
查看正在运行的用户会话,然后使用 WTSQuerySessionInformation(WTSSessionInfoEx)
查询所需的用户会话以获取其 WTSINFOEX_LEVEL1
会话信息,其中包含 {{1}如果会话被锁定,将被设置为 SessionFlags
的成员。
或者,您可以通过监听来自 WM_WTSSESSION_CHANGE
的 WTSRegisterSessionNotification()
消息,让您的应用实时跟踪会话锁定/解锁。或者,您可以编写一个单独的后台服务来侦听 WTS_SESSIONSTATE_LOCK
通知,然后根据需要通过您选择的 IPC 机制通知您的主应用。