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.

  • 相关阅读:
    关于TextField
    判断一个显示对象是否移除
    不争气的Discuz!NT 3.6和MVC3整合,主要实现同步登录和注册,登出。
    我的博客是英文的
    TFS不提供 Team Foundation 服务的解决办法。
    四 为提高entity framework 性能,要注意哪些事情.
    三 EF 和ado.net 的性能对比.
    一 关于大项目的经验总结
    在.net 中,ajax 如何调用本页数据源
    关于有序guid 的使用
  • 原文地址:https://www.cnblogs.com/94YY/p/2044085.html
Copyright © 2011-2022 走看看