终止ShellExecuteEx会终止“错误”窗口

时间:2014-04-11 13:36:31

标签: winapi shellexecuteex

我使用此代码启动webbrowser然后终止它。然而,在启动webbrowser并使其成为活动窗口之后,它会在后台捕获窗口(启动浏览器的应用程序)并终止它。所以我希望它在forground(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。这是为什么?

1 个答案:

答案 0 :(得分:0)

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

要获取已创建进程的进程句柄,请阅读hProcess结构的SHELLEXECUTEINFO成员。这就是说你最好在这个实例中调用CreateProcess,因为你已经知道了你想要启动的可执行文件。