- 注册时间
- 2011-3-10
- 最后登录
- 1970-1-1
该用户从未签到
|
我读物品名称总是乱码,转换成ANSI也是一样,请问怎样才能
正确的读出物品名称呢?
var
jizhi,sjizhi,itemnum,pid:Word;
tmp, tmp2, baseItem, i: Integer;
hWnd,lpNumberOfBytes:LongWord;
Buffer:Array[0..8] of WideChar;
itemname:WideString;
h:THandle;
begin
hWnd:=FindWindow('QElementClient Window',nil);
GetWindowThreadProcessId(hWnd,@pid);
h:=OpenProcess(PROCESS_ALL_ACCESS, false, pid);
ReadProcessMemory(h,Pointer($0012F82C),@jizhi,4,lpNumberOfBytes);//读基础地址
ReadProcessMemory(h,Pointer(jizhi+$8),@sjizhi,4,lpNumberOfBytes);
ReadProcessMemory(h,Pointer(sjizhi+$24),@sjizhi,4,lpNumberOfBytes);
ReadProcessMemory(h,Pointer(sjizhi+$14),@itemnum,4,lpNumberOfBytes);
tmp := 0;
tmp2 := 0;
if itemnum = 0 then exit;
for i := 0 to 769 do
begin
ReadProcessMemory(h, pointer(sjizhi + 24), @tmp, 4, lpNumberOfBytes);
ReadProcessMemory(h, pointer(tmp + (i * 4)), @tmp2, 4, lpNumberOfBytes);
if tmp2 <> 0 then
begin
ReadProcessMemory(h, pointer(tmp2 + 4), @baseitem, 4, lpNumberOfBytes);
ReadProcessMemory(h, pointer(baseitem + $164), @Buffer, 8, lpNumberOfBytes);
Buffer[8]:=#0;
itemname:=WideString(buffer);
edit1.Text:=itemname;
ShowMessage(itemname);
//过滤物品,删除不需要的物品地址,这样就无法拾取了
end;
end; |
|