gpt4 book ai didi

c++ - EnumWindows 不能枚举 UAC 窗口?

转载 作者:行者123 更新时间:2023-11-28 02:16:58 25 4
gpt4 key购买 nike

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

这里是执行环境:- Windows 7 标准嵌入式- UAC 打开 - HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA 设置为 1

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

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

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

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

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

谢谢。

最佳答案

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

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

关于c++ - EnumWindows 不能枚举 UAC 窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33764023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com