杀死单进程
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;
}
多进程
BOOL KillProcess(vector<CString> vProcessName)
{
BOOL retCode = TRUE;
if (vProcessName.size() == 0)
return retCode;
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap,&pe32))
{
do
{
CString processName = _T("");
processName.Format(_T("%s"),pe32.szExeFile);
processName.MakeUpper();
vector<CString>::iterator fit = find(vProcessName.begin(),vProcessName.end(),processName);
if (fit != vProcessName.end())
{
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,pe32.th32ProcessID);
if (hProcess != NULL)
{
if (TerminateProcess(hProcess,0) == FALSE)
{
retCode = FALSE;
}
CloseHandle(hProcess);
hProcess = NULL;
}
else
{
retCode = FALSE;
}
}
}while(Process32Next(hProcessSnap,&pe32));
}
CloseHandle(hProcessSnap);
}
else
{
retCode = FALSE;
}
return retCode;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。