0

我使用此代码启动网络浏览器,然后终止它。然而,在启动 webbrowser 并使其成为活动窗口之后,它会在后台捕获窗口(启动浏览器的应用程序)并终止它。所以我希望它终止前台(网络浏览器)中的窗口。

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() 给了我正在运行的应用程序的 id,而不是新打开的 webbrowser。这是为什么?

4

1 回答 1

0

的全部目的GetCurrentProcessId是返回调用该函数的进程的PID。

要获取已创建进程的进程句柄,请读取结构的hProcess成员SHELLEXECUTEINFO。也就是说,您最好CreateProcess在这种情况下调用,因为您已经知道要启动的可执行文件。

于 2014-04-11T20:50:40.563 回答