【发布时间】:2021-06-10 15:21:38
【问题描述】:
通常可以使用SHQueryUserNotificationState API 检查桌面是否被锁定,但是当作为 LocalSystem 运行时,无法正确检测到状态。
是否有人知道可用于检测设备是否被锁定的任何变通方法或替代 API?
【问题讨论】:
-
这是因为 Windows 支持多个并发桌面(用户)。锁定哪个桌面取决于桌面的用户。
通常可以使用SHQueryUserNotificationState API 检查桌面是否被锁定,但是当作为 LocalSystem 运行时,无法正确检测到状态。
是否有人知道可用于检测设备是否被锁定的任何变通方法或替代 API?
【问题讨论】:
SHQueryUserNotificationState() 查询主叫用户的桌面会话状态。但是可以同时登录多个用户。因此,您必须查询您感兴趣的特定用户会话。
您可以使用WTEnumerateSessions() 查看正在运行的用户会话,然后使用WTSQuerySessionInformation(WTSSessionInfoEx) 查询所需用户会话的WTSINFOEX_LEVEL1 会话信息,其中有一个SessionFlags 成员将设置为@ 987654331@ 如果会话被锁定。
或者,您可以通过侦听来自WTSRegisterSessionNotification() 的WM_WTSSESSION_CHANGE 消息,让您的应用实时跟踪会话锁定/解锁。或者,您可以编写一个单独的后台服务来侦听SERVICE_CONTROL_SESSIONCHANGE 通知,然后根据需要通过您选择的 IPC 机制通知您的主应用程序。
【讨论】: