-1

我正在使用 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()函数创建信息窗口,它还创建单独的窗口消息线程。窗口是可见的,最上面的,它响应消息。我必须创建它,因为我已经阅读hwnd了结构中需要正确的参数SHELLEXECUTEINFO才能将 UAC 提示窗口保持在顶部。

但这不起作用。有时 UAC 窗口会最大化运行,但主要是在任务栏中最小化并突出显示。无论如何,有没有一种方法可以将 UAC 窗口置于顶部?

4

1 回答 1

1

只是将其标记为已回答

如果调用 ShellExecuteEx 的程序没有前台激活,那么 UAC 对话框就无法激活,所以它必须等到用户激活它。雷蒙德·陈

于 2016-01-30T05:57:02.143 回答