Завершение 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 в этом случае, так как вы уже знаете исполняемый файл, который хотите запустить.

Другие вопросы по тегам