以前用过向窗体发送WM_CLOSE消息,今见内存快照-->进程遍历-->获取进程id-->进程句柄-->关闭进程。如下:
bool FileClient::CloseProcess(char* sProcessName)
{
if(sProcessName==NULL)
{
return false;
}
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
//进程快照
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
return false;
}
DWORD hMsDevId = 0;
//进程遍历
BOOL bMore = ::Process32First(hProcessSnap,&pe32);
while (bMore)
{
if(stricmp(pe32.szExeFile,sProcessName)==0)
{
hMsDevId =pe32.th32ProcessID;
break;
}
bMore = ::Process32Next(hProcessSnap,&pe32);
}
//清除快照
::CloseHandle(hProcessSnap);
//结束进程
if(hMsDevId != 0)
{
int intResult;
intResult = 0;
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,FALSE,hMsDevId);
WaitForSingleObject(hProcess, 5000);
intResult = ::TerminateProcess(hProcess,4);
if(intResult != 0)
{
::Sleep(1000);
return true;
}
else
{
return false;
}
}
else
{
return true;
}
}