码迷,mamicode.com
首页 > 系统相关 > 详细

遍历进程链表找到游戏进程

时间:2019-06-25 13:38:11      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:快捷键   name   bool   sse   class   第一个   一个   har   process   

技术图片

为了省去自己注册窗口类,创建窗口类可以直接使用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值。
}

 

遍历进程链表找到游戏进程

标签:快捷键   name   bool   sse   class   第一个   一个   har   process   

原文地址:https://www.cnblogs.com/hanhandaren/p/11079211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!