笑话大全网 - 爆笑笑话 - mfc如何彻底退出进程

mfc如何彻底退出进程

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

}