我正在使用 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 窗口置于顶部?