基本上,我有一個程序,將不止一次啓動。所以,將會有兩個或更多的程序啓動。如何按名稱殺死進程? (Win32 API)
我想使用Win32 API並使用特定名稱終止/終止所有進程。
我已經看到殺死一個進程的例子,但沒有多個進程名稱完全相同(但參數不同)。
基本上,我有一個程序,將不止一次啓動。所以,將會有兩個或更多的程序啓動。如何按名稱殺死進程? (Win32 API)
我想使用Win32 API並使用特定名稱終止/終止所有進程。
我已經看到殺死一個進程的例子,但沒有多個進程名稱完全相同(但參數不同)。
嘗試下面的代碼,killProcessByName()
將殺死任何進程名稱爲filename
:
#include <windows.h>
#include <process.h>
#include <Tlhelp32.h>
#include <winbase.h>
#include <string.h>
void killProcessByName(const char *filename)
{
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
PROCESSENTRY32 pEntry;
pEntry.dwSize = sizeof (pEntry);
BOOL hRes = Process32First(hSnapShot, &pEntry);
while (hRes)
{
if (strcmp(pEntry.szExeFile, filename) == 0)
{
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0,
(DWORD) pEntry.th32ProcessID);
if (hProcess != NULL)
{
TerminateProcess(hProcess, 9);
CloseHandle(hProcess);
}
}
hRes = Process32Next(hSnapShot, &pEntry);
}
CloseHandle(hSnapShot);
}
int main()
{
killProcessByName("notepad++.exe");
return 0;
}
注:代碼是區分於filename
敏感,你可以編輯它不區分大小寫。
我該如何使這個程序不區分大小寫? – HereToLearn
您可以使用另一個比較函數而不是'strcmp'。按照[this](http://stackoverflow.com/questions/5820810/case-insensitive-string-comp-in-c) – deepmax
'if(hProcess!= NULL && pEntry.th32ProcessID!= GetCurrentProcessId())'避免殺死你自己! ;-) – poukill
我剛碰到類似的問題。這就是我想出的...
void myClass::killProcess()
{
const int maxProcIds = 1024;
DWORD procList[maxProcIds];
DWORD procCount;
char* exeName = "ExeName.exe";
char processName[MAX_PATH];
// get the process by name
if (!EnumProcesses(procList, sizeof(procList), &procCount))
return;
// convert from bytes to processes
procCount = procCount/sizeof(DWORD);
// loop through all processes
for (DWORD procIdx=0; procIdx<procCount; procIdx++)
{
// get a handle to the process
HANDLE procHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procList[procIdx]);
// get the process name
GetProcessImageFileName(procHandle, processName, sizeof(processName));
// terminate all pocesses that contain the name
if (strstr(processName, exeName))
TerminateProcess(procHandle, 0);
CloseHandle(procHandle);
}
}
爲什麼你不做你所做的反覆殺死單個過程,直到你失敗? (不再需要殺死的進程) –
終止進程是一個危險的操作。爲什麼你需要殺死這些進程?它可以更優雅地完成(比如通過發送所有窗口的WM_CLOSE消息)? –
它是一個控制檯應用程序...以及py2exe轉換爲py2exe到.exe,我相信唯一的方法是強制終止 – dikidera