頭文件:
#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
代碼上面已實現
