步驟
- 遍歷程式快照,比對名稱取得 PID。
OpenProcess(PROCESS_TERMINATE, FALSE, pid) 取得控制代碼。
TerminateProcess(hProcess, exitCode) 強制結束。
CloseHandle 釋放資源。
程式碼
/* main.cpp
* Created on: 2014.06.08
* Author: Spike
*/
#include <iostream>
#include <string>
#include <map>
#include <windows.h>
#include <TlHelp32.h>
using namespace std;
bool terminateProcess(const string& name) {
PROCESSENTRY32 pe32; pe32.dwSize = sizeof(pe32);
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnap == INVALID_HANDLE_VALUE) return false;
BOOL bRet = Process32First(hSnap, &pe32);
while (bRet) {
if (name == pe32.szExeFile) {
HANDLE hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pe32.th32ProcessID);
if (hProc) {
TerminateProcess(hProc, 0);
CloseHandle(hProc);
CloseHandle(hSnap);
return true;
}
}
bRet = Process32Next(hSnap, &pe32);
}
CloseHandle(hSnap);
return false;
}
int main() {
terminateProcess("Image.exe");
return 0;
}
注意
- 強制終止不會執行目標程式的解構函式/清理邏輯,可能導致資料遺失。
- 建議先嘗試傳送
WM_CLOSE 或 CTRL_C_EVENT 讓程式優雅退出。