C++結束程序 按進程名結束

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <Tlhelp32.h>
#include <algorithm>
#include <vector>

void kill(int pid)
{
    HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
    BOOL bOkey = TerminateProcess(hProcess, 0);
    if(bOkey)
    {
        WaitForSingleObject(hProcess, 1000);
        CloseHandle(hProcess);
        hProcess = NULL;
    }
}
void TerminateProcessByName(PCWSTR name)
{
    DWORD pid = 0;
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32W process;
    ZeroMemory(&process, sizeof(process));
    process.dwSize = sizeof(process);
    std::vector<DWORD> pids;
    if (Process32FirstW(snapshot, &process))
    {
        do
        {
            // Compare process.szExeFile based on format of name, i.e., trim file path
            // trim .exe if necessary, etc.
            std::wstring szExeFile = process.szExeFile;
            std::wstring szName = name;
            /*std::transform(szExeFile.begin(), szExeFile.end(), szExeFile.begin(), towlower);
            std::transform(szName.begin(), szName.end(), szName.begin(), towlower);*/

            if (!wcscmp(szExeFile.c_str(), szName.c_str()))
            {
                pid = process.th32ProcessID;
                pids.push_back(pid);
            }
        } while (Process32NextW(snapshot, &process));
    }
    CloseHandle(snapshot);
    size_t size = pids.size();
    for(size_t i = 0; i < size; ++i)
    {
        kill(pids[i]);
    }
}

int main()
{
    //Server.exe就是你要結束的程序名
    TerminateProcessByName(L"Server.exe");
    return 0;
}

 

發佈了41 篇原創文章 · 獲贊 49 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章