Я использую Microsoft Visual Studio 2010, и я пишу свой код в C/C++.Привести окно UAC сверху с помощью ShellExecuteEx()
У меня есть код, который автоматически запускает мой процесс установки. Процесс установки требует контроля учетных записей в этом случае, поэтому я использую 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 в начало в любом случае?
Если программа, которая называется «ShellExecuteEx», не имеет активизации переднего плана, тогда диалог UAC не может активировать, поэтому он должен ждать, пока это не активирует его использование. –
Вы просачиваете строку, которую вы '_strdup'. –
@JonathanPotter это для теста, я его удалю. – deselect