zoukankan      html  css  js  c++  java
  • [3]遍历进程链表找到游戏进程

    为了省去自己注册窗口类,创建窗口类可以直接使用Windows提供的API 函数:DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, DialogProc);

    //注册快捷键 F1
    RegisterHotKey(hwnd, 1, 0, VK_F1); //注册热键的系统API ,详细定义见MSDN;


    获取系统进程常用API:

    CreateToolhelp32Snapshot()

    Process32First()

    Process32Next()

    首先通过创建系统快照,然后通过函数Frist定位到需要获取的进程列表,最后通过Next 遍历一个个把列表值取出;

    #include "stdafx.h"
    #include "CprocessInfo.h"
    #include "tlhelp32.h"
    
    CprocessInfo::CprocessInfo() //构造函数    
    {
        m_dwPid = 0;
        m_hProcess = NULL;
    
    }
    
    
    CprocessInfo::~CprocessInfo()        //析构函数
    
    {
    }
    
    /************************************************************************/
    /*      功能:遍历寻找进程
            返回值: 进程ID
        */
    /************************************************************************/
    DWORD CprocessInfo::MyFindProcess(PTCHAR pNameBuffer)
    {
        //创建一个系统快照,第二个参数如果是模块或者线程的快照,则需要填写该进程的PID,全局返回则填0;
        //调用成功,返回快照的句柄,调用失败,返回INVALID_HANDLE_VALUE 。
        //TH32CS_SNAPPROCESS把系统全部进程拍出来
        HANDLE hHand = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    
    
        //用来存放快照进程信息的一个结构体。(存放进程信息和调用成员输出进程信息)用来 Process32First指向第一个进程信息,并将进程信息抽取到PROCESSENTRY32中。用Process32Next指向下一条进程信息。
        PROCESSENTRY32 processInfo = { 0 };
        processInfo.dwSize = sizeof(PROCESSENTRY32);//必填项,否则无法区分新旧机器,返回失败
    
        //process32First是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,
        //我们可以利用process32First函数来获得第一个进程的句柄。
        //返回信息全在processInfo结构体当中
        //和Process32Next是一个组合,Process32First觉得去哪拿,Process32Next把其他都拿出来
        Process32First(hHand, &processInfo);
        
        //通过一个循环使用Process32Next,把所有进程读取出来
        do 
        {
            //通过对比字符串来判断是否当前进程已经获取,szExeFile进程全名;
            if (!_tcscmp(pNameBuffer, processInfo.szExeFile))
            {
                CloseHandle(hHand);//获取的句柄不用一定要关闭,否则会内存泄漏
                m_dwPid = processInfo.th32ProcessID;
                 return m_dwPid;
            }
    
        } while (Process32Next(hHand, &processInfo));
        CloseHandle(hHand);//获取的句柄不用一定要关闭,否则会内存泄漏
        return 0;
    }
    // Win32Project1.cpp : 定义应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "Win32Project1.h"
    
    /************************************************************************/
    /*                全局变量                                              */
    /************************************************************************/
    DWORD g_dwHotKetVule = 0;
    CprocessInfo g_ProcessInfo = {};
    
    
    
    INT_PTR CALLBACK DialogProc(
        HWND hwndDlg,
        UINT UMsg,
        WPARAM wParam,
        LPARAM lParam
    );
    
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR    lpCmdLine,
                         _In_ int       nCmdShow)
    {
        DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, DialogProc);
    }
    
    /************************************************************************/
    /*                命令处理                                              */
    /************************************************************************/
    
    
    INT_PTR CALLBACK DialogProc(
        _In_ HWND   hwnd,
        _In_ UINT   uMsg,
        _In_ WPARAM wParam,
        _In_ LPARAM lParam
    )
    {
        switch (uMsg)
        {
        case WM_INITDIALOG:  //窗口初始化    
            InitDialog(hwnd);
            break;
    
        case WM_CLOSE:    //窗口关闭处理
            EndDialog(hwnd, 0);
            return true;
    
        case WM_COMMAND:  //命令
            switch (LOWORD( wParam))
            {
            case IDC_BUTTON_BOUND:
                BindGameProcess(TEXT("hl2.exe"));
                
                break;
            case IDC_BUTTON_VIEW:
                    break;
            case IDC_BUTTON_SPEED:
                break;
            
            default:
                break;
            }
            break; 
        case WM_HOTKEY:  //拦截热键消息
            OnHotKey(hwnd, wParam, lParam);
            break;
        default:
            break;
    
        }
        return FALSE;
    }
    /************************************************************************/
    /*                 初始化                                               */
    /************************************************************************/
    
    BOOL InitDialog(HWND hwnd)
    {
        //注册快捷键 F1
        RegisterHotKey(hwnd, 1, 0, VK_F1); //注意这里填写的热键标识符1,判断的时候也是判断标识符
        return FALSE;
    }
    
    /************************************************************************/
    /*               热键处理                                               */
    /************************************************************************/
    
    
    DWORD OnHotKey(HWND hwnd, WPARAM wParam, LPARAM lParam)
    {
        switch (wParam)
        {
        case 1:
            MessageBox(0, TEXT("f1"), 0, 0);
        default:
            break;
        }
        return 0;
    }
    
    
    /************************************************************************/
    /*                绑定操作                                              */
    /************************************************************************/
    
    VOID  BindGameProcess(PTCHAR PNameBuffer)
    {
        g_ProcessInfo.MyFindProcess(PNameBuffer);
        g_ProcessInfo.m_hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE, g_ProcessInfo.m_dwPid); //获取PID后返回ID值。
    }
    原创学习随笔心得,请勿转载!
  • 相关阅读:
    python之isinstance和issubclass
    python中类的继承
    python中面向对象
    python中常用的内置模块
    Python常用模块
    python中的常用内置模块
    python中的包、模块及导入
    python中的内置函数(二)
    国内7大核心期刊
    PS学习列表
  • 原文地址:https://www.cnblogs.com/hanhandaren/p/11079211.html
Copyright © 2011-2022 走看看