c++ - 在以本地系统帐户运行时检测 Windows 设备是否被锁定
问题描述
通常可以使用SHQueryUserNotificationState API 检查桌面是否被锁定,但是当作为 LocalSystem 运行时,无法正确检测到状态。
是否有人知道可用于检测设备是否被锁定的任何变通方法或替代 API?
解决方案
SHQueryUserNotificationState()
查询主叫用户的桌面会话状态。但是可以同时登录多个用户。因此,您必须查询您感兴趣的特定用户会话。
您可以使用WTEnumerateSessions()
查看正在运行的用户会话,然后使用WTSQuerySessionInformation(WTSSessionInfoEx)
查询所需的用户会话以获取其WTSINFOEX_LEVEL1
会话信息,如果会话被锁定,该SessionFlags
成员将被设置为。WTS_SESSIONSTATE_LOCK
或者,您可以通过侦听WM_WTSSESSION_CHANGE
来自WTSRegisterSessionNotification()
. 或者,您可以编写一个单独的后台服务来侦听SERVICE_CONTROL_SESSIONCHANGE
通知,然后根据需要通过您选择的 IPC 机制通知您的主应用程序。
推荐阅读
- scala - 对 Scala List[List[Int]] 中的元素求和
- javascript - “如何修复加载资源失败:服务器在 React 和 express 中响应状态为 500
- html - 谷歌字体显示=交换奇怪的行为
- c++ - 为什么必须同时使用 glBindBuffer 和 glBindBufferRange 在 OpenGL 中创建统一缓冲区?
- javascript - 如何用数字替换字符串中出现的字母
- asp.net-mvc - 如何从客户端打开outlook?
- c# - 在 asp net core 2.0 中提供具有身份验证的静态文件夹
- python - 为什么python的bisect_left即使值不存在也返回有效索引?
- php - 使用 GuzzleHttp 进行 HTTP POST 方法调用时,php 进程无响应
- sql - 当我在数据库中有以下类型的数据时如何检索数据?