頭文件:
#include <Windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <ShellAPI.h>
查找進程: 就是調用windowApi遍歷所有啟動進程, 實現如下
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將其殺死, 代碼實現如下
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啟動
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
代碼上面已實現