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值。
    }
    原创学习随笔心得,请勿转载!
  • 相关阅读:
    (引)spring学习笔记1.什么是控制反转
    Arduino 各种模块篇 步进电机 step motor 舵机 servo 直流电机 总复习
    Raspberry Pi Wireless Adaptor
    Pyramid 使用总结1
    Arduino 各种模块篇 人体红外感应模块 proximity sensor
    Pyramid 使用总结2
    Webcam Streaming Desktop Recording on Linux for ubuntu or its destros
    Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)
    Arduino 各种模块篇 motor shield 电机扩展板(舵机、直流电机、步进电机party)
    转载 stepper motors
  • 原文地址:https://www.cnblogs.com/hanhandaren/p/11079211.html
Copyright © 2011-2022 走看看