////////////////////////////////////////
procedure DsplyRolePosXYZ();
// PosX=[[[924E0C]+1C]+20]+3c//主角坐标X 取整(坐标/10)+400
// PosY=[[[924E0C]+1C]+20]+44//主角坐标Y 取整(坐标/10)+550
// PosZ=[[[924E0C]+1C]+20]+40//主角坐标Z 取整(坐标/10)
Const
BaseAddress=$924E0C;
Offset1=$1C;
Offset2=$20;
PosOffsetX=$3c;
PosOffsetY=$44;
PosOffsetZ=$40;
var
MyHwnd:HWND;
MyPid:Dword;
MyProcess:Thandle;
MyPointer:Integer;
Readbyte:DWORD;//Size_T
PosX,PosY,PosZ:Single;//
begin
MyHwnd:=FindWindow(NIL,'Element Client');
// if myHwnd=0 then ShowMessage('No Found Element Client Window');
GetWindowThreadProcessId(MyHwnd,@myPid);
MyProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,myPid);
ReadProcessMemory(MyProcess,Pointer(BaseAddress),@MyPointer,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+Offset1),@MyPointer,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+Offset2),@MyPointer,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+PosOffsetX),@PosX,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+PosOffsetY),@PosY,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+PosOffsetZ),@PosZ,4,Readbyte);
CloseHandle(MyProcess);
//显示数值
PosX:=Trunc(PosX/10+400); //x坐=取整数部分(坐标/10)+400
PosY:=Trunc(PosY/10+550); //Y坐标=取整数部分(坐标/10)+550
PosZ:=Trunc(PosZ/10); //z坐标=取整数部分(坐标/10)
form1.Edit1.text:=FloatToStr(PosX)+','+FloatToStr(PosY)+'↑'+FloatToStr(PosZ);//使用format
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
DsplyRolePosXYZ;
end;
end.
//找到这个地址
//算出这个公式 》》》注意这个公式是如何算出来的
//Trunc
//使用format
/////////////////////////////////////////
使用MemView(结构化内存监视器)找到人物坐标地址
