C++指定プロセスを殺す(Windows)
2029 ワード
ING
一.システム命令でプロセスを殺す
システムコマンドでプロセスを殺し、黒いウィンドウが点滅
二.TerminateProcessによるプロセスの殺し
三.プロセス間通信により、プロセスをアクティブに終了させる
一.システム命令でプロセスを殺す
システムコマンドでプロセスを殺し、黒いウィンドウが点滅
bool KillProcess(vector &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 &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;
}
三.プロセス間通信により、プロセスをアクティブに終了させる