如何在一个程序中停止另外一个程序的运行
在一个程序APP中通过下面的代码启动了一个进程calc.exe:
STARTUPINFOStartupInfo;
intdwCreationFlags;
memset( &StartupInfo, 0, sizeof(StartupInfo) );
StartupInfo.cb = sizeof(StartupInfo);
dwCreationFlags = NORMAL_PRIORITY_CLASS;
if ( !CreateProcess( "calc.exe", NULL, NULL, NULL, FALSE,dwCreationFlags, NULL, NULL, &StartupInfo, &m_EcgRespMonitor ) )
{
ASSERT(0);
}
那么在程序APP的其他地方,如何让calc.exe可靠的停止执行,最好不要使用TerminateProcess
[解决办法]
你已经得到这个exe的句柄了, 然后SendMessage(hwnd, wm_close);
[解决办法]
先FindWindow找到计算器窗口,获得窗口句柄,然后PostMessage(hwnd, wm_close, 0, 0);
[解决办法]
HWND GetWindowHandleByPID(DWORD dwProcessID)
{
HWND h = GetTopWindow(0 );
while ( h )
{
DWORD pid = 0;
DWORD dwTheardId = GetWindowThreadProcessId( h,&pid);
if (dwTheardId != 0)
{
if ( pid == dwProcessID/*your process id*/ )
{
// here h is the handle to the window
return h;
}
}
h = GetNextWindow( h , GW_HWNDNEXT);
}
return NULL;
}
HWND hWnd = GetWindowHandleByPID(hProessId);
if(NULL != hWnd)
{
::PostMessage(hWnd, WM_CLOSE, 0, 0);
}
[解决办法]
停止执行?
你是要让他exit还是suspend?
退出的话就直接发WM_CLOSE
suspend的话用SuspendThread
[解决办法]
TerminateThread
[解决办法]
m_pWnd=FindWindow(NULL,"要杀死的程序窗口名");
if(m_pWnd)
{
::PostMessage(m_pWnd->m_hWnd,WM_CLOSE,0,0);//迫使其退出
}