首页 > 解决方案 > 在以本地系统帐户运行时检测 Windows 设备是否被锁定

问题描述

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

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

标签: c++winapi

解决方案


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

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

或者,您可以通过侦听WM_WTSSESSION_CHANGE来自WTSRegisterSessionNotification(). 或者,您可以编写一个单独的后台服务来侦听SERVICE_CONTROL_SESSIONCHANGE通知,然后根据需要通过您选择的 IPC 机制通知您的主应用程序。


推荐阅读