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;?
}