首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道Winlogon桌面何时准备好输入?

如何知道Winlogon桌面何时准备好输入?
EN

Stack Overflow用户
提问于 2017-10-27 15:00:56
回答 1查看 697关注 0票数 2

我成功地在服务(本地系统帐户)中使用了SendSAS。我在服务启动后四秒钟调用API。不管启动过程的持续时间如何,Windows设法缓存(某种程度上)调用:相同的代码最终在打开电源后几秒钟在快速膝上型计算机(Win10)上显示一个登录屏幕,并在运行虚拟化(wmware)的慢速服务器(2012R2)上延迟很长时间后向我显示登录屏幕。

我还可以使用CreateProcessAsUser (带有更新的令牌)在会话1、Station、Desktop中注入一个微小的可执行文件。然后,这个过程使用SendInput“自动登录”会话(是的,这是一个可怕的想法,我知道)。

我的问题是:如果这个微小的过程“太早”就开始了,什么都不会发生。如果服务等待,比如说,2分钟,一切都没问题。

我应该使用什么API (在服务中或在已启动的进程中)来了解WinLogon桌面何时准备好接受键盘输入?

我尝试了WTSGetActiveConsoleSessionId (在服务中)和OpenInputDesktop (在这个过程中)跳过这个失败表示需要等待,但是没有结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-06 15:32:09

当您的流程在附加到WinSta0\Winlogon桌面的会话1中开始时,您可以定期测试当前IUIAutomationElement聚焦元素的Control Type

要使用的API是:IUIAutomation::GetFocusedElement,然后是IUIAutomationElement:GetCurrentPropertyValue,用于UIA_ControlTypePropertyId属性。当您成功地获得UIA_EditControlTypeId类型的焦点元素时,Windows屏幕就可以接受输入。

不要忘记在每次尝试之间添加一个Sleep调用。

使用Windows 2008R2和2012R2以及Windows 10测试确定。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46978053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档