高手帮忙把易语言代码转换成delphi的
变量名:进程:整数型句柄:整数型游戏基址:整数型HP:整数型角色名:字节集_启动窗口句柄=窗口取句柄(“game.exe”,,)进程=窗口取进程ID(句柄)游戏基址=内存...
变量名:
进程 : 整数型
句柄 : 整数型
游戏基址:整数型
HP:整数型
角色名:字节集
_启动窗口
句柄 = 窗口取句柄 (“game.exe”, , )
进程 = 窗口取进程ID (句柄)
游戏基址 = 内存读整数 (进程, 15222012, )
角色名 = 内存读字节集 (进程, 游戏基址 + 150(偏移), 8)
标签.标题 = 转换Unicode转Ansi (角色名)
HP = 内存读整数 (进程, 游戏基址 + 12)
标签1.标题 = 到文本 (HP)
_时钟 周期事件
.如果真 (选择框1.选中)
.如果真 (HP < 到数值 (0))
关闭系统 (#关机, )
希望有高手 能把上面的代码 写成 DELPHI 代码!
或可以把代码发到我邮箱里 pubwin@yeah.net
感激不尽,代码可用追加悬赏分数! 展开
进程 : 整数型
句柄 : 整数型
游戏基址:整数型
HP:整数型
角色名:字节集
_启动窗口
句柄 = 窗口取句柄 (“game.exe”, , )
进程 = 窗口取进程ID (句柄)
游戏基址 = 内存读整数 (进程, 15222012, )
角色名 = 内存读字节集 (进程, 游戏基址 + 150(偏移), 8)
标签.标题 = 转换Unicode转Ansi (角色名)
HP = 内存读整数 (进程, 游戏基址 + 12)
标签1.标题 = 到文本 (HP)
_时钟 周期事件
.如果真 (选择框1.选中)
.如果真 (HP < 到数值 (0))
关闭系统 (#关机, )
希望有高手 能把上面的代码 写成 DELPHI 代码!
或可以把代码发到我邮箱里 pubwin@yeah.net
感激不尽,代码可用追加悬赏分数! 展开
1个回答
展开全部
没玩过E着鸟玩具 不清楚他的那地址是十进制的还是十六进制的
看样子像十进制 我给转十六进制了 不对自己改
很好奇为啥是关机...
另外就是如果是网游的话 每次游戏主程序更新 内存地址都会改变的
╮(╯_╰)╭
执行 Games();
Const
Baseadr = $E844FC; // 一级地址
var
Ecxi, Hp, Num:Cardinal;
Process:THandle;
Names:array [0..40] of WideChar;
NamesA:PAnsiChar; // D7 PChar = PAnsiChar
function GetProHandle():THandle; // 通过窗口标题 找窗口句柄 然后获取进程PID 再打开进程返回句柄
var
Ghwnd,ProcID,ProcessID:THandle;
begin
Result := 0;
Ghwnd := FindWindowA('game.exe', Nil); // 通过类名查找窗体句柄
if Ghwnd > 0 then
begin
GetWindowThreadProcessId(Ghwnd, ProcID); // 获取进程PID
ProcessID := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID); // 打开进程返回句柄
if ProcessID <> 0 then Result := ProcessID;
end;
end;
procedure WCharToChar(WString: PWideChar; AnsiString:PAnsiChar); // Unicode To Ansi
var
Len, dwMinSize: Integer;
lpUsedDefaultChar: BOOL;
begin
lpUsedDefaultChar := False;
len := lstrlenW(WString) * 2 + 1;
if AnsiString = nil then AnsiString := GetMemory(Len);
dwMinSize := WideCharToMultiByte(CP_OEMCP, 0, WString, -1, nil, 0, nil, @lpUsedDefaultChar);
if(len < dwMinSize) then
begin
FreeMemory(AnsiString);
Exit;
end;
WideCharToMultiByte(CP_OEMCP, 0, WString, -1, PAnsiChar(AnsiString), len, nil, @lpUsedDefaultChar);
end;
procedure TimerProc(hwnd:HWND; uMsg, idEvent:UINT; dwTime:DWORD); stdcall; // 定时器
begin
ReadProcessMemory(Pid, Pointer(ECXI + $C), @Hp, 4, Num); // HP
if Hp < 0 then
begin
//你要干的事情
end;
end;
procedure Games();
begin
Process := GetProHandle;
ReadProcessMemory(Process, Pointer(Baseadr), @ECXI, 4, Num); // 读取二级基址 整数类型大小为4字节
ZeroMemory(@Names, Sizeof(Names)); // #0 填充
ReadProcessMemory(Pid, Pointer(ECXI + $96), @Names[0], 8, Num); // 读取游戏ID // 8/2=4个字 够用么?
WCharToChar(@Names, NamesA); // Unicode 转 Ansi
Caption := NamesA; // 修改标题
SetTimer(Handle, 10, 1000, @TimerProc); // 开启定时器
end;
看样子像十进制 我给转十六进制了 不对自己改
很好奇为啥是关机...
另外就是如果是网游的话 每次游戏主程序更新 内存地址都会改变的
╮(╯_╰)╭
执行 Games();
Const
Baseadr = $E844FC; // 一级地址
var
Ecxi, Hp, Num:Cardinal;
Process:THandle;
Names:array [0..40] of WideChar;
NamesA:PAnsiChar; // D7 PChar = PAnsiChar
function GetProHandle():THandle; // 通过窗口标题 找窗口句柄 然后获取进程PID 再打开进程返回句柄
var
Ghwnd,ProcID,ProcessID:THandle;
begin
Result := 0;
Ghwnd := FindWindowA('game.exe', Nil); // 通过类名查找窗体句柄
if Ghwnd > 0 then
begin
GetWindowThreadProcessId(Ghwnd, ProcID); // 获取进程PID
ProcessID := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID); // 打开进程返回句柄
if ProcessID <> 0 then Result := ProcessID;
end;
end;
procedure WCharToChar(WString: PWideChar; AnsiString:PAnsiChar); // Unicode To Ansi
var
Len, dwMinSize: Integer;
lpUsedDefaultChar: BOOL;
begin
lpUsedDefaultChar := False;
len := lstrlenW(WString) * 2 + 1;
if AnsiString = nil then AnsiString := GetMemory(Len);
dwMinSize := WideCharToMultiByte(CP_OEMCP, 0, WString, -1, nil, 0, nil, @lpUsedDefaultChar);
if(len < dwMinSize) then
begin
FreeMemory(AnsiString);
Exit;
end;
WideCharToMultiByte(CP_OEMCP, 0, WString, -1, PAnsiChar(AnsiString), len, nil, @lpUsedDefaultChar);
end;
procedure TimerProc(hwnd:HWND; uMsg, idEvent:UINT; dwTime:DWORD); stdcall; // 定时器
begin
ReadProcessMemory(Pid, Pointer(ECXI + $C), @Hp, 4, Num); // HP
if Hp < 0 then
begin
//你要干的事情
end;
end;
procedure Games();
begin
Process := GetProHandle;
ReadProcessMemory(Process, Pointer(Baseadr), @ECXI, 4, Num); // 读取二级基址 整数类型大小为4字节
ZeroMemory(@Names, Sizeof(Names)); // #0 填充
ReadProcessMemory(Pid, Pointer(ECXI + $96), @Names[0], 8, Num); // 读取游戏ID // 8/2=4个字 够用么?
WCharToChar(@Names, NamesA); // Unicode 转 Ansi
Caption := NamesA; // 修改标题
SetTimer(Handle, 10, 1000, @TimerProc); // 开启定时器
end;
追问
能不能把代码 和 编译的文件 发到我邮箱啊,你这个我编译出来还有点问题,发生错误! 不知道缺少什么组件和包!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询