⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usearch.pas

📁 zhengtu外挂源码
💻 PAS
字号:
{*******************************************************}
{                                                       }
{       目标进程搜索单元                                }
{                                                       }
{       主要搜索人物的各种属性及状态                    }
{                                                       }
{*******************************************************}

unit uSearch;

interface

uses
  Windows, Classes, SysUtils;

type
  TThreadSearch = class(TThread)
  private
    Found: Boolean;
    { Private declarations }
  public
  protected
    procedure Execute; override;
    procedure UpdateChrName;
    procedure UpdateForm;
  end;
var
  ThreadSearch: TThreadSearch;
  GameBaseAddr: DWORD;
implementation

uses uDefine, fmMain;

{ TThreadSearch }

procedure TThreadSearch.Execute;
var
  pid: Cardinal;
  pProc: Cardinal;
  pPos: PDWORD;
  pStr: PChar;
  baseAddr, readok: DWORD;
  vBuffer: array[0..255] of Char;
  mem: TMemoryStream;
  pGameChr: PGameChrProp;
begin
  while not Terminated do
  begin
    Sleep(599);
    GameChr.ZtHwnd := FindWindow(@GameChr.ztClassName[1], nil);
    if GameChr.ZtHwnd = 0 then
    begin
      GameChr.ClearProp; //为负数表示找不到征途窗口
      Synchronize(UpdateForm);
      Suspend; //挂起搜索线程
      Continue;
    end;
    try
      GetWindowThreadProcessId(GameChr.ZtHwnd, @pid);
      pProc := OpenProcess(PROCESS_VM_READ, False, pid);
      mem := TMemoryStream.Create;
      try
        //        mem.Clear;
        //        mem.SetSize(40);

        GameBaseAddr := GameChr.BaseAddr - 4;
        //        baseAddr :=$280FC86-4;// $143010;
        //        ReadProcessMemory(pProc, Pointer(baseAddr), mem.Memory, 40, readok);
        //        pStr := mem.Memory;
        //        GameChr.MapName := string(pStr);
        //        mem.Clear;
        //        mem.SetSize(8);
        //        baseAddr := GameBaseAddr - $85A; //坐标地址
        //        ReadProcessMemory(pProc, Pointer(baseAddr), mem.Memory, 8, readok);
        //        pPos := mem.Memory;
        //        if pPos^ > 999 then
        //          GameChr.PosName := '000:000'
        //        else
        //        begin
        //          GameChr.PosName := IntToStr(Word(pPos^));
        //          inc(pPos);
        //          GameChr.PosName := GameChr.PosName + ':' + IntToStr(Word(pPos^));
        //        end;

        if GameChr.NeedSearchName then
        begin
          GameChr.NeedSearchName := False;
          mem.clear;
          mem.SetSize(32);
          baseAddr := GameBaseAddr - $4CA - 4; //姓名地址
          ReadProcessMemory(pProc, Pointer(baseAddr), mem.Memory, 32, readok);
          pStr := mem.Memory;
          GameChr.ChrName := string(pStr);
//          mem.SaveToFile('d:\zt.txt');
          Synchronize(UpdateChrName);
        end;

        mem.clear;
        mem.SetSize(80);
        baseAddr := GameBaseAddr;
        ReadProcessMemory(pProc, Pointer(baseAddr), mem.Memory, 80, readok);

        pGameChr := mem.Memory;

        GameChr.ChrProp := pGameChr^; //保存搜索到的属性
        pGameChr := nil;
      finally
        VirtualFreeEx(pProc, Pointer(GameBaseAddr), 0, MEM_RELEASE);
        CloseHandle(pProc);

        mem.Free;
      end;
    except
    end;
    Synchronize(UpdateForm);
  end;
end;

procedure TThreadSearch.UpdateChrName;
begin
  if not Assigned(frmMain) then
    Exit;
  with frmMain do
  begin
    edtChrName.Text := GameChr.ChrName;
    SetTitle(GameChr.ChrName);
    GetChrSetting;
    tryIco.Hint:=GameChr.ChrName;
  end;
end;

procedure TThreadSearch.UpdateForm;
begin
  if not Assigned(frmMain) then
    Exit;
  with frmMain,GameChr.ChrProp do
  begin
    if (MaxHp > 0) and (HP <=MaxHp) then
    begin
      gHp.MaxValue := MaxHp;
      gHp.Progress := Hp;
    end;
    if (MaxMp > 0) and (Mp <= MaxMp) then
    begin
      gMp.MaxValue := MaxMp;
      gMp.Progress := Mp;
    end;
    lblHp.Caption := Format('%5d /%5d', [Hp, MaxHp]);
    lblMp.Caption := Format('%5d /%5d', [Mp, MaxMp]);
  end;
end;

initialization
  ThreadSearch := TThreadSearch.Create(True);

finalization
  ThreadSearch.Terminate;
  ThreadSearch.Free;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -