C++ 实现 查找进程, 杀死进程, 启动进程, 进程重启

头文件:

#include <Windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <ShellAPI.h>

查找进程: 就是调用windowApi遍历所有启动进程,  实现如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
bool FindProcess(std::string strProcessName, DWORD& nPid)
{
    TCHAR tszProcess[64] = { 0 };
    lstrcpy(tszProcess, _T(strProcessName.c_str()));
    //查找进程
    STARTUPINFO st;
    PROCESS_INFORMATION pi;
    PROCESSENTRY32 ps;
    HANDLE hSnapshot;
    memset(&st, 0, sizeof(STARTUPINFO));
    st.cb = sizeof(STARTUPINFO);
    memset(&ps, 0, sizeof(PROCESSENTRY32));
    ps.dwSize = sizeof(PROCESSENTRY32);
    memset(&pi, 0, sizeof(PROCESS_INFORMATION));
    // 遍历进程 
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnapshot == INVALID_HANDLE_VALUE)
        return false;
    if (!Process32First(hSnapshot, &ps))
        return false;
    do {
        if (lstrcmp(ps.szExeFile, tszProcess) == 0)
        {
            //找到制定的程序
            nPid = ps.th32ProcessID;
            CloseHandle(hSnapshot);
            printf("找到进程: %s\n", tszProcess);
            return true;
            //getchar();
            //return dwPid;
        }
    } while (Process32Next(hSnapshot, &ps));
    CloseHandle(hSnapshot);
    return false;
}

  杀死进程: 就是通过遍历所有的启动的进程, 然后查找进程ID, 调用winapi将其杀死, 代码实现如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool KillProcess(DWORD dwPid)
{
    printf("Kill进程Pid = %d\n", dwPid); getchar();
    //关闭进程
    HANDLE killHandle = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION |   // Required by Alpha
        PROCESS_CREATE_THREAD |   // For CreateRemoteThread
        PROCESS_VM_OPERATION |   // For VirtualAllocEx/VirtualFreeEx
        PROCESS_VM_WRITE,             // For WriteProcessMemory);
        FALSE, dwPid);
    if (killHandle == NULL)
        return false;
    TerminateProcess(killHandle, 0);
    return true;
}

  启动进程: 就是给出进程名绝对路径, 然后调用winapi启动

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool StartPrcess(std::string strProcessName)
{
    TCHAR tszProcess[64] = { 0 };
    lstrcpy(tszProcess, _T(strProcessName.c_str()));
    //启动程序
    SHELLEXECUTEINFO shellInfo;
    memset(&shellInfo, 0, sizeof(SHELLEXECUTEINFO));
    shellInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    shellInfo.fMask = NULL;
    shellInfo.hwnd = NULL;
    shellInfo.lpVerb = NULL;
    shellInfo.lpFile = tszProcess;                      // 执行的程序名(绝对路径)
    shellInfo.lpParameters = NULL;
    shellInfo.lpDirectory = NULL;
    shellInfo.nShow = SW_MINIMIZE;                      //SW_SHOWNORMAL 全屏显示这个程序
    shellInfo.hInstApp = NULL;
    printf("程序自动重启中.... \n");
    ShellExecuteEx(&shellInfo);
     
    return true;
}

  

程序重启流程: 1: 先查找需要重启的程序进程Id

        2: 启动需要重启的程序

        3: 杀死第一步的进程id

代码上面已实现

(0)

相关推荐