C++ Windows程序控制
阿新 • • 發佈:2018-11-06
一、殺死指定程序
// 殺死指定程序 BOOL KillProcessFromName(CString strProcessName) { HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 pe; pe.dwSize = sizeof(PROCESSENTRY32); if (!Process32First(hSnapShot, &pe)) { return FALSE; } strProcessName.MakeLower(); while (Process32Next(hSnapShot, &pe)) { CString scTmp = pe.szExeFile; scTmp.MakeLower(); if (!scTmp.Compare(strProcessName)) { DWORD dwProcessID = pe.th32ProcessID; HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID); ::TerminateProcess(hProcess, 0); CloseHandle(hProcess); return TRUE; } scTmp.ReleaseBuffer(); } strProcessName.ReleaseBuffer(); return FALSE; }
二、判斷指定程序是否存在
// 判斷程序是否存在 BOOL IsProcessExit(const WCHAR* strFilename) { BOOL bRet = FALSE; HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) return FALSE; PROCESSENTRY32 pe32 = { 0 }; pe32.dwSize = sizeof(PROCESSENTRY32); if (Process32First(hProcessSnap, &pe32)) { do { if (_wcsicmp(pe32.szExeFile, strFilename) == 0) { bRet = TRUE; break; } } while (Process32Next(hProcessSnap, &pe32)); } else { bRet = FALSE; } CloseHandle(hProcessSnap); return bRet; }
三、啟動指定程序
// 啟動程序 void ProcessStart(CString strSrvName) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); ZeroMemory(&pi, sizeof(pi)); int num = 0; while (!CreateProcess(NULL, (LPWSTR)strSrvName.GetBuffer(), NULL, NULL, false, 0, NULL, NULL, &si, &pi)) { num++; if (10 == num) { WriteLog("啟動程序失敗"); break; } } }