【问题标题】:Detect if Windows device is locked while running as Local System account在以本地系统帐户运行时检测 Windows 设备是否被锁定
【发布时间】:2021-06-10 15:21:38
【问题描述】:

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

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

【问题讨论】:

  • 这是因为 Windows 支持多个并发桌面(用户)。锁定哪个桌面取决于桌面的用户。

标签: c++ winapi


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢雷米! WTSQuerySessionInformation() 运行良好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 2012-08-01
  • 2021-06-06
  • 2010-09-09
相关资源
最近更新 更多