TCHAR* char2tchar(const char* str) { int iLen = strlen(str); TCHAR* chRtn = new TCHAR[iLen + 1]; size_t converted = 0; mbstowcs_s(&converted, chRtn, iLen + 1, str, _TRUNCATE); return chRtn; } bool FindProcess(std::string strProcessName, DWORD& nPid) { TCHAR tszProcess[64] = { 0 }; lstrcpy(tszProcess, char2tchar(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 ", tszProcess); return true; //getchar(); //return dwPid; } } while (Process32Next(hSnapshot, &ps)); CloseHandle(hSnapshot); return false; } bool KillProcess(DWORD dwPid) { printf("Kill进程Pid = %d ", dwPid); //关闭进程 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; } void FindAndKill(std::string process) { DWORD pid; if (FindProcess(process, pid)) { KillProcess(pid); } }