EnumWindows无法枚举UAC窗口

EnumWindows can not enumerate UAC window?

本文关键字:UAC 窗口 枚举 EnumWindows      更新时间:2023-10-16

我目前正在构建一个应用程序,该应用程序在一些硬件设备上执行一些无人值守的自动化测试。它执行一堆.msi安装程序,然后对它们执行测试。

以下是执行环境:-Windows 7标准嵌入式-UAC开启-HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystemEnableLUA设置为1

我使用EnumWindows()/EnumChildWindows() Win32 API调用的组合来检测具有特定标题的窗口,它们的子窗口,如按钮、编辑框。。。然后通过Win32调用CCD_ 4发送击键和鼠标点击来自动执行一些任务。

在弹出UAC对话框之前,此操作效果良好。然后,用户似乎必须手动键入管理员密码。我们的应用程序知道管理员凭据,并且应该在出现这种情况时使用它们。

问题是这样的。是否可以通过EnumWindows()调用枚举UAC窗口(当然是打开的时候)?我们的例程扫描各种窗口标题,每3秒在主gui线程上执行一次。但从未检测到UAC窗口。

我的解决方法是使用CreateProcessWithLogonW()调用运行.msi安装程序。使用管理员凭据作为参数,这当然有效,而且UAC框从未弹出。但是,客户没有接受(

客户希望UAC框弹出,并用管理员凭据以程序方式填充,而无需用户交互。我不知道如何实现这一点,也不知道这是否可能?

谢谢。

UAC对话框显示在另一个桌面上,即安全桌面。您的标准用户将无法实现安全桌面的自动化。所以我认为这是不可能的。

我相信你可以禁用安全桌面,并在交互式桌面上显示UAC对话框,但这当然是一个很大的安全漏洞。