zoukankan      html  css  js  c++  java
  • 读取游戏数据

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;

    type
      TForm1 = class(TForm)
        Label3: TLabel;
        label1: TLabel;
        Label2: TLabel;
        Labname: TLabel;
        Labhp: TLabel;
        Labmp: TLabel;
        Button1: TButton;
        Label4: TLabel;
        Lablevel: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;
      ProcessID: Thandle;
      ProcID: Thandle;
      Ghwnd: Thandle;
      Ecxi: Cardinal;
      r_level,r_hp,r_maxhp,r_mp,r_maxmp:Cardinal;
      r_Name:array[0..16] of WideChar;
      r_Name1:integer;
      const baseadr = $912BA4;  //一级基址

    implementation

    {$R *.dfm}

    procedure TForm1.FormCreate(Sender: TObject);
    var
      Num: Cardinal;
    begin
      Ghwnd := FindWindow('QElementClient Window', 'Element Client');  //获取窗口
      if Ghwnd = 0 then
      begin
        ShowMessage('游戏未启动');
        Application.Terminate();
      end;
      GetWindowThreadProcessId(Ghwnd, ProcID);    //进程ID
      ProcessID := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);      // 进程句柄
      if ProcessID = 0 then
      begin
        showMessage('无法打开线程');
        Application.Terminate();
      end;
      ReadProcessMemory(ProcessID, Pointer(baseadr), @ECXI, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $24), @ECXI, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $25C), @r_HP, 4, Num);    //血
      ReadProcessMemory(ProcessID, Pointer(ECXI + $274), @r_MAXHP, 4, Num);  //血最大值
      ReadProcessMemory(ProcessID, Pointer(ECXI + $260), @r_mp, 4, Num);    //蓝
      ReadProcessMemory(ProcessID, Pointer(ECXI + $278), @r_maxmp, 4, Num);  //蓝最大值
      ReadProcessMemory(ProcessID, Pointer(ECXI + $250), @r_level, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $398), @r_Name1, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(r_Name1), @r_Name, 34, Num);
      labhp.Caption:=inttostr(r_hp)+'/'+inttostr(r_maxhp);
      labmp.Caption:=inttostr(r_mp)+'/'+inttostr(r_maxmp);
      lablevel.Caption:=inttostr(r_level)+'级';
      LabName.Caption := r_Name;
      CloseHandle(ProcessID);                    //关闭进程句柄
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    close;
    end;

    end.

  • 相关阅读:
    C++ mutex&&RWlock
    一个资源池模型
    C++安全编码摘录
    C++点滴
    git常用命令(转)
    ASN.1
    TDOA泰勒级数法
    teamviewer解除最大通话限制-特别破解版(转)
    剑指offer——旋转数组的最小数字
    常见的相关分析方法——结合实例
  • 原文地址:https://www.cnblogs.com/94YY/p/2044085.html
Copyright © 2011-2022 走看看