tiangao 发表于 2011-4-2 08:59:12

Delphi读取人物名字的问题

procedure TForm1.FormCreate(Sender: TObject);
var
Num: Cardinal;
begin
Ghwnd := FindWindow('TianLongBaBu WndClass', '天龙八部 0.88.0898 (网通-华北网通一区:居庸关)'); //获取窗口
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 + $c), @ECXI, 4, Num);
ReadProcessMemory(ProcessID, Pointer(ECXI + $154), @ECXI, 4, Num);
ReadProcessMemory(ProcessID, Pointer(ECXI + $4), @ECXI, 4, Num);
ReadProcessMemory(ProcessID, Pointer(ECXI + $8e8), @r_HP, 4, Num); //血
ReadProcessMemory(ProcessID, Pointer(ECXI + $950), @r_MAXHP, 4, Num); //血最大值
ReadProcessMemory(ProcessID, Pointer(ECXI + $8ec), @r_mp, 4, Num); //蓝
ReadProcessMemory(ProcessID, Pointer(ECXI + $954), @r_maxmp, 4, Num); //蓝最大值
ReadProcessMemory(ProcessID, Pointer(ECXI + $5c), @r_level, 4, Num);
ReadProcessMemory(ProcessID, Pointer(ECXI + $30), @r_Name1, 4, Num);
ReadProcessMemory(ProcessID, Pointer(r_Name1), @r_Name, 10, 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.
在网上找的代码 自己改的 名字不能显示 求 高手指点一二

蓝色海洋 发表于 2011-4-2 08:59:30

szName: array of Char;   
ReadProcessMemory(ProcessID,Pointer(r_Name1),Pointer(
    @szName),sizeof(szName),Num);

直接这样就可以了

jinyuwei 发表于 2011-4-2 09:00:08

ReadProcessMemory(ProcessID, Pointer(ECXI + $30), @r_Name1, 4, Num);
ReadProcessMemory(ProcessID, Pointer(r_Name1), @r_Name, 就是这里sizeof(), Num);
页: [1]
查看完整版本: Delphi读取人物名字的问题