首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么在一个程序中停止另外一个程序的运行

2012-02-13 
如何在一个程序中停止另外一个程序的运行在一个程序APP中通过下面的代码启动了一个进程calc.exe:STARTUPIN

如何在一个程序中停止另外一个程序的运行
在一个程序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);//迫使其退出
}

热点排行