Завершение ShellExecuteEx закрывает "неправильное" окно
Я использую этот код, чтобы запустить веб-браузер, а затем завершить его. Однако вместо этого, после запуска веб-браузера и превращения его в активное окно, оно ловит окно в фоновом режиме (приложение, которое запускает браузер) и закрывает его. Так что я хочу, чтобы он закрывал окно в forground (веб-браузере).
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = "C:\iexplore.exe";
ShExecInfo.lpParameters = "http://www.google.se";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOWMAXIMIZED;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,10);
DWORD Pid = GetCurrentProcessId();
HANDLE h = OpenProcess(PROCESS_TERMINATE, false, Pid);
TerminateProcess(h, 1);
CloseHandle(h);
Я предполагаю, что проблема в том, что GetCurrentProcessId() дает мне идентификатор запущенного приложения, а не недавно открытый веб-браузер. Это почему?
1 ответ
Вся цель GetCurrentProcessId
должен вернуть PID процесса, который вызывает функцию.
Чтобы получить дескриптор процесса созданного процесса, прочитайте hProcess
член SHELLEXECUTEINFO
структура. Тем не менее, вам будет лучше позвонить CreateProcess
в этом случае, так как вы уже знаете исполняемый файл, который хотите запустить.