BOOL KillProcessFromName(CString strProcessName)
{
//創建進程快照(TH32CS_SNAPPROCESS表示創建所有進程的快照)
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//PROCESSENTRY32進程快照的結構體
PROCESSENTRY32 pe;
//實例化后使用Process32First獲取第一個快照的進程前必做的初始化操作
pe.dwSize = sizeof(PROCESSENTRY32);
//下面的IF效果同:
//if(hProcessSnap == INVALID_HANDLE_VALUE) 無效的句柄
if (!Process32First(hSnapShot, &pe))
{
return FALSE;
}
//將字符串轉換為小寫
strProcessName.MakeLower();
//如果句柄有效 則一直獲取下一個句柄循環下去
while (Process32Next(hSnapShot, &pe))
{
//pe.szExeFile獲取當前進程的可執行文件名稱
CString scTmp = pe.szExeFile;
//將可執行文件名稱所有英文字母修改為小寫
scTmp.MakeLower();
//比較當前進程的可執行文件名稱和傳遞進來的文件名稱是否相同
//相同的話Compare返回0
if (!scTmp.Compare(strProcessName))
{
//從快照進程中獲取該進程的PID(即任務管理器中的PID)
DWORD dwProcessID = pe.th32ProcessID;
HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);
::TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
return TRUE;
}
scTmp.ReleaseBuffer();
}
strProcessName.ReleaseBuffer();
return FALSE;
}
//使用
KillProcessFromName("XXX.exe");