win32查找,杀死进程

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);
    }
}
原文地址:https://www.cnblogs.com/wolbo/p/14718368.html