unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,
StdCtrls, ComCtrls, ExtCtrls, Gauges;
type
TForm1 = class(TForm)
Gauge1: TGauge;
Gauge2: TGauge;
Edit1: TEdit;
Edit2: TEdit;
Timer1: TTimer;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Gauge3: TGauge;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
wideChars : array[0..11] of WideChar;
myString : String;
Form1: TForm1;
i,rw:DWord;
ch:WideChar;
wch:array[0..255] of WideChar;
KlientWindow:HWND; //Handle клиента
ProcessId:Integer;
hProcess:Integer; //Идентификатор объекта
HPMinValue:Integer; //Минимальное значение ХП (из Edit1)
MPMinValue:Integer; //Минимальное значение МП (из Edit2)
L:Integer; // уров
// Nik:TListItem; //ник
M:Integer; //бабло
Nik : String;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
KlientWindow := FindWindow(nil, PChar('Perfect World')); //Находим Handle окна
GetWindowThreadProcessId(KlientWindow,@ProcessId); //Получаем И.П.
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); //Открываем процесс с возможностью записи
HPMinValue := StrToInt(Edit1.Text);
MPMinValue := StrToInt(Edit2.Text);
Timer1.Enabled := True;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled := False;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var HP,HPMax,MP,MPMax:Integer;
WHP,WHPMax,L,WMP,WMPMax,Lvl,Nikname,Nik,M,Money,Opit,O,Omax,Om,NoB:DWord;
begin
try //На всякий случай заключаем в try...except, дабы в случай релога не засыпать пользователя ошибками
ReadProcessMemory (hProcess, Pointer($00B9029C), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$34), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$0494), @WHP, sizeof(WHP), NoB); //Читаем значение HP
HP := Integer(WHP); //Переводим Integer
ReadProcessMemory (hProcess, Pointer($00B9029C), @WHPMax, sizeof(WHPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WHPMax+$34), @WHPMax, sizeof(WHPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WHPMax+$04DC), @WHPMax, sizeof(WHPMax), NoB); //Читаем значение MaxHP
HPMax := Integer(WHPMax); //Переводим Integer
ReadProcessMemory (hProcess, Pointer($00B9029C), @WMP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$34), @WMP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$0498), @WMP, sizeof(WMP), NoB); //Читаем значение MP
MP := Integer(WMP); //Переводим Integer
ReadProcessMemory (hProcess, Pointer($00B9029C), @WMPMax, sizeof(WMPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WMPMax+$34), @WMPMax, sizeof(WMPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WMPMax+$04E0), @WMPMax, sizeof(WMPMax), NoB); //Читаем значение MaxMP
MPMax := Integer(WMPMax); //Переводим Integer
Gauge1.Progress := round(HP * 100 / HPMax); //Присваиваем процентное значение HP Gauge1
Gauge2.Progress := round(MP * 100 / MPMax); //Присваиваем процентное значение MP Gauge2
ReadProcessMemory (hProcess, Pointer($00B9029C), @Lvl, sizeof(Lvl), NoB);
ReadProcessMemory (hProcess, Pointer(Lvl+$34), @Lvl, sizeof(Lvl), NoB);
ReadProcessMemory (hProcess, Pointer(Lvl+$048C), @Lvl, sizeof(Lvl), NoB);
L := Integer(Lvl); //Переводим Integer
Label1.Caption := IntToStr(L);
ReadProcessMemory (hProcess, Pointer($00B9029C), @Money, sizeof(Money), NoB);
ReadProcessMemory (hProcess, Pointer(Money+$34), @Money, sizeof(Money), NoB);
ReadProcessMemory (hProcess, Pointer(Money+$0560), @Money, sizeof(Money), NoB) ;
M := Integer(Money) ; //Переводим Integer
Label4.Caption := IntToStr(M);
ReadProcessMemory (hProcess, Pointer($00B9029C), @Nikname, sizeof(Nikname), NoB);
ReadProcessMemory (hProcess, Pointer(Nikname+$34), @Nikname, sizeof(Nikname), NoB);
ReadProcessMemory (hProcess, Pointer(Nikname+$0670), @Nikname, sizeof(Nikname), NoB);
ReadProcessMemory (hProcess, Pointer(Nikname+$0), @Nikname, sizeof(Nikname), NoB);
//Nik := Integer(Nikname); //Переводим Integer
Label2.Caption := IntToStr (Nikname) ;
EXCEPT
end;
end;
end.