• 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);
        }
    }
  • 相关阅读:
    BZOJ4975: [Lydsy1708月赛]区间翻转( 博弈&逆序对)
    BZOJ4550: 小奇的博弈(NIMK博弈& 组合数& DP)
    BZOJ5301: [Cqoi2018]异或序列(莫队)
    BZOJ5450: 轰炸(水题,Tarjan缩点求最长路)
    BZOJ5125: [Lydsy1712月赛]小Q的书架(DP决策单调性)
    codevs 2495 水叮当的舞步
    bzoj 1086: [SCOI2005]王室联邦
    bzoj 3720: Gty的妹子树
    bzoj 1024: [SCOI2009]生日快乐
    bzoj 1085: [SCOI2005]骑士精神
  • 原文地址:https://www.cnblogs.com/wolbo/p/14718368.html
Copyright © 2020-2023  润新知