我正在使用Microsoft Visual Studio 2010,並且正在使用C/C++編寫我的代碼。使用ShellExecuteEx()使UAC窗口到頂部
我有自動啓動我的安裝過程的代碼。安裝過程需要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窗口置頂?
如果調用'ShellExecuteEx'的程序沒有前臺激活,那麼UAC對話框無法激活,所以必須等到使用激活它爲止。 –
你正在泄漏字符串'_strdup'。 –
@JonathanPotter它是測試,我會刪除它。 – deselect