版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mao0514/article/details/88757217
一.通过系统命令杀死进程
通过系统命令杀死进程,有黑窗口闪烁
bool KillProcess(vector<string> &processNameVec)
{
bool result = false;
string strProcess;
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pInfo;
pInfo.dwSize = sizeof(pInfo);
Process32First(hSnapShot, &pInfo);
do
{
wstring wstrTemp = pInfo.szExeFile;
strProcess = UnicodeToAscii(wstrTemp);
bool bIn = false;
for (int i = 0; i < processNameVec.size(); i++) {
if (processNameVec[i] == strProcess) {
bIn = true;
}
}
if (bIn) {
result = true;
string cmd;
char cmdData[128] = { 0 };
sprintf_s(cmdData, "taskkill /F /PID %d /T", pInfo.th32ProcessID);
cmd = cmdData;
system(cmd.c_str());
}
} while (Process32Next(hSnapShot, &pInfo));
return result;
}
二.通过TerminateProcess杀死进程
bool KillProcessEx(vector<string> &processNameVec)
{
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe;
pe.dwSize = sizeof(PROCESSENTRY32);
if (!Process32First(hSnapShot, &pe))
{
return false;
}
while (Process32Next(hSnapShot, &pe))
{
wstring strTemp = pe.szExeFile;
string strProcessTemp = UnicodeToAscii(strTemp);
bool bIn = false;
for (int i = 0; i < processNameVec.size(); i++)
{
if (processNameVec[i] == strProcessTemp)
{
bIn = true;
}
}
if (bIn)
{
DWORD dwProcessID = pe.th32ProcessID;
HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);
::TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
}
}
return true;
}