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\n", tszProcess);
return true;
//getchar();
//return dwPid;
}
} while (Process32Next(hSnapshot, &ps));
CloseHandle(hSnapshot);
return false;
}
bool KillProcess(DWORD dwPid)
{
printf("Kill进程Pid = %d\n", 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);
}
}