EnumWindows无法枚举UAC窗口
EnumWindows can not enumerate UAC window?
我目前正在构建一个应用程序,该应用程序在一些硬件设备上执行一些无人值守的自动化测试。它执行一堆.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对话框,但这当然是一个很大的安全漏洞。
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 问:如何使用C++中的按钮从窗口打开窗口
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 如何在cpp文件之间切换窗口?在Qt中
- QuadTree只在窗口的右上角绘制
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 处理闪烁窗口事件
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- C++win32 API创建多个类似视口的窗口
- SFML RenderWindow打开窗口需要很长时间
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 获取 SFML 窗口的 HWND 和高可用性?
- 如何获取 GLFW 窗口 ID?
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 用于窗口的 HID 终端
- SFML 文本未绘制在窗口上
- 如何为窗口截屏
- EnumWindows无法枚举UAC窗口