1. 程式人生 > >VC 通過程序名 殺掉程序 (KillProcessFromName註釋版)

VC 通過程序名 殺掉程序 (KillProcessFromName註釋版)

//kill程序from名字
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;
}