根據進程名稱來關閉進程,核心方法就是利用快照,根據進程名擷取進程ID,然後再Kill。
實現如下:
#include "Tlhelp32.h"
//功能:掃描進程
//參數:進程名
//返回:進程ID
DWORD CTCPServer::ScanProcess(TCHAR* processName)
{
DWORD processID =0; //存放尋找進程的ID
HANDLE hHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //為當前系統進程建立快照
DWORD dwID = ::GetCurrentProcessId(); //當前進程的ID
if(INVALID_HANDLE_VALUE!=hHandle) //如果建立快照成功
{
PROCESSENTRY32 stEntry;
stEntry.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hHandle,&stEntry))
{
do
{
if (strstr(stEntry.szExeFile,processName)) //比較進程名
{
if (dwID!=stEntry.th32ProcessID)
{
processID = stEntry.th32ProcessID;
break;
}
}
} while (Process32Next(hHandle,&stEntry)); //在快照中尋找下一個進程
}
CloseHandle(hHandle); //釋放快照控制代碼。
}
return processID;
}
調用樣本:
DWORD processID = ScanProcess("*.exe");
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,FALSE,processID);
TerminateProcess(hProcess,0);
這樣就可以實現通過尋找進程名來殺死進程!