基本上,我有一个程序会多次启动。因此,该程序将启动两个或多个进程。

我想使用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区分大小写,您可以对其进行编辑以使其不区分大小写。

09-27 08:07