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

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

码农世界 2024-05-22 前端 67 次浏览 0个评论

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

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

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

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

效果图:

使用任务管理器找pid

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

#include 
#include 
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;
    }
}

转载请注明来自码农世界,本文标题:《4.实现显示游戏人物属性》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,67人围观)参与讨论

还没有评论,来说两句吧...

Top