如何知道Winlogon桌面何时可以输入
How to know when the Winlogon desktop is ready for inputs?
我成功地在服务(本地系统帐户)中使用了SendSAS。我在服务启动四秒钟后调用API。似乎无论引导过程的持续时间如何,Windows都能缓存(某种程度上)调用:在快速笔记本电脑(Win10)上,相同的代码最终在开机几秒钟后向我显示登录屏幕,并在运行虚拟化(wmware)的慢速服务器(2012R2)上显示更长延迟后的登录屏幕。
我还可以使用CreateProcessAsUser(带有更新的令牌)在会话1、Station WinSta0、Desktop Winlogon中注入一个微小的可执行文件。然后,该过程使用SendInput来"自动登录"会话(是的,我知道这是一个糟糕的想法)。
我的问题是:如果这个微小的过程开始得"太早",什么都不会发生。如果服务等待,例如2分钟,则一切正常
我应该使用什么API(在服务或启动过程中)来确定WinLogon桌面何时准备好接受键盘输入?
我尝试了WTSGetActiveConsoleSessionId(在服务中)和OpenInputDesktop(在过程中),但失败表明需要等待,但没有成功。
当您的进程在连接到WinSta0Winlogon
桌面的会话1中启动时,您可以定期测试当前关注IUIAutomationElement
的元素的Control Type
。
要使用的API是:IUIAutomation::GetFocusedElement,然后是UIA_ControlTypePropertyId
属性的IUIAutomotionElement::GetCurrentPropertyValue。当您成功获得UIA_EditControlTypeId
类型的聚焦元素时,Windows登录屏幕就可以接受输入了。
不要忘记在每次尝试之间添加一个Sleep
调用。
在Windows Server 2008R2和2012R2以及Windows 10上测试正常。
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 是否可以在命令行中将输入参数传递给可执行文件
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- 为什么或何时应在调用之前将可调用函数参数强制转换为右值?
- RXCPP:创建一个不关心可观察量输入类型的扩展
- 可视C++ - 从链接器>输入>其他依赖项中排除文件
- 可选类输入中的 C++ 填充向量
- 用于使用可选输入文件运行 C++ 的 VIM 映射
- 即使可执行文件的输入是从文件重定向的,如何强制从终端输入?
- 显示用户输入的平均数大于 50 和所有可被 3 整除的数字的乘积
- 全球安装的键盘钩可防止键盘输入其他应用程序
- 如何从Windows CMD运行可执行文件并将其传递给文件输入的参数参数和重定向
- 如何将可编辑的预定义字符串写入 C++ 控制台应用程序中的 cin 输入运算符
- 如何知道Winlogon桌面何时可以输入
- C 功能具有3个参数,可在通用二进制输入中读取
- 何时使用 std::invoke 而不是简单地调用可调用的?
- 将输入值从BASH脚本传递到C 可执行文件
- 我如何有效地清理此程序并仍然检测文件输入何时不是字母
- 如何检测磁贴何时可遍历