看流星社区

 找回密码
 注册账号
查看: 2796|回复: 2

物品名称怎么读才不是乱码?

[复制链接]

该用户从未签到

发表于 2011-3-11 09:55:57 | 显示全部楼层 |阅读模式
我读物品名称总是乱码,转换成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;

该用户从未签到

发表于 2011-3-11 09:56:33 | 显示全部楼层
我们从内存里读出的中文是 UNICODE 编码的。。 把 UNICODE 转换为   ANSI 编码就可以了..

该用户从未签到

发表于 2011-3-11 09:56:51 | 显示全部楼层
Buffer[8]:=#0;
  itemname:=WideString(buffer);

这两句代码应该可以不要,至少我的没有问题
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-25 07:15

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表