4.实现显示游戏人物属性

知识来源于腾讯课堂易道云

前置知识:3.游戏中自定义数据类型的解读分析

首先使用Visual Studio创建一个控制台项目,然后再设置一些项目属性,如果不设置下面的属性那么我们的程序没有权限访问其它进程,下面可以理解为是开启管理员模式

根据上体开启管理员之后再运行Visual Studio时会提示下图的弹框选择红框里的使用其他凭据重新启动,等待Visual Studio重启完就可以运行我们的程序了

效果图:

使用任务管理器找pid

代码:用到的api是ReadProcessMemory根据进程句柄读取进程的内存区域

#include <iostream>
#include <Windows.h>

struct Role
{
    int unknown1[4];
    int hp;
    int maxHp;
    int tiLi;
    int maxTiLi;
    int mp;
    int maxMp;
    int gongJiLi;
    int fangYu;
    int shenFa;
    int dengJi;
    int unknown2;
    int jingYan;
    int shengJi;
    int yiDongSuDu;
    int unknown3;
    int mianXiang;
    int unknown4[2];
    int xZuoBiao;
    int yZuoBiao;
    int unknown5[36];
    char name[0x20];
};
HANDLE hProcecss;
BOOL ReadInt(unsigned address, Role* role) {
    int value{};
    SIZE_T readByte{};
    BOOL retData = ReadProcessMemory(hProcecss,(LPCVOID)address, (LPVOID)role,sizeof(Role), &readByte);
    return retData;
}

int main()
{
    DWORD Pid;
    Role role;

linput:
    std::cout << "请输入游戏进程ID:";
    std::cin >> Pid;
    hProcecss = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);
    if (hProcecss) {
        while (true)
        {
            if (ReadInt(0x4CEF08, &role)) {
                system("cls");
                std::cout << "角色名:[" << role.name << "]" << std::endl;
                std::cout << "等级:[" << role.dengJi << "]" << std::endl;
                std::cout << "生命值:[" << role.hp << "/" << role.maxHp << "]" << std::endl;
                std::cout << "坐标:[" << role.xZuoBiao << ", " << role.yZuoBiao << "]" << std::endl;
                Sleep(100);
            }
            else {
                std::cout << "内存读取失败";
                break;
            }
        }
    }
    else {
        std::cout << "打开游戏进程失败";
        goto linput;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值