gpt4 book ai didi

c - 使用 ShellExecuteEx() 将 UAC 窗口置于顶部

转载 作者:行者123 更新时间:2023-11-30 19:13:49 33 4
gpt4 key购买 nike

我正在使用 Microsoft Visual Studio 2010,并使用 C/C++ 编写代码。

我有自动启动安装过程的代码。在这种情况下,安装过程需要 UAC,因此我使用 ShellExecuteEx() API 函数和 runas 动词:

hWindow = InstallCreateWindow(NULL);

execInfo.cbSize = sizeof(execInfo);
execInfo.lpVerb = _strdup("runas");
execInfo.hwnd = hWindow;
execInfo.lpFile = szPath;
execInfo.lpParameters = szParams;
execInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;

Sleep(1000);

SetActiveWindow(hWindow);

if(ShellExecuteEx(&execInfo))
return execInfo.hProcess;

if(GetLastError() == ERROR_CANCELLED)
{
// user answered NO to UAC prompt
}

InstallCreateWindow() 函数创建信息窗口,并且还创建单独的窗口消息线程。窗口是可见的,位于最上面,并且它响应消息。我必须创建它,因为我已经读到 SHELLEXECUTEINFO 结构中需要正确的 hwnd 参数才能将 UAC 提示窗口保持在顶部。

但这不起作用。有时UAC窗口会最大化运行,但主要是最小化并在任务栏中突出显示。有没有办法在任何情况下都将 UAC 窗口置于顶部?

最佳答案

只是将其标记为已回答

If the program that called ShellExecuteEx does not have foreground activation, then the UAC dialog cannot take activation, so it has to wait until the use activates it. Raymond Chen

关于c - 使用 ShellExecuteEx() 将 UAC 窗口置于顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35096947/

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