根据进程名删除后台运行的可执行文件,例如删除后台执行的XXX.exe文件只需要传入可执行文件名即可
已测试过
BOOL KillProcessFromName(CString strProcessName)
{
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe;//头文件#include<TlHelp32.h>
pe.dwSize = sizeof(PROCESSENTRY32);
if(!Process32First(hSnapShot,&pe))
{
return FALSE;
}
strProcessName.MakeLower();
while (Process32Next(hSnapShot,&pe))
{
CString scTmp = pe.szExeFile;
scTmp.MakeLower();
if(!scTmp.Compare(strProcessName))
{
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 CtestDlg::ExeIsRuning(LPCTSTR szName)
{
DWORD id = 0; // 进程ID
PROCESSENTRY32 pe; // 进程信息
pe.dwSize = sizeof(PROCESSENTRY32);
try
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 获取系统进程列表
if(Process32First(hSnapshot, &pe)) // 返回系统中第一个进程的信息
{
do
{
if(0 == _wcsicmp(pe.szExeFile, szName)) // 不区分大小写比较
{
return TRUE;
}
}while(Process32Next(hSnapshot, &pe)); // 下一个进程
}
CloseHandle(hSnapshot); // 删除快照
return FALSE;
}
catch (CException* e)
{
return FALSE;
}
}