Hier mal wie versprochen, mein aktualisierter Code...
Nach dem Klick auf den Button wird ein Timer gestartet, der jede Sekunde prüft, ob das Spiel geöffnet ist und wenn ja, wie der Kontostand ist.
Sobald der Kontostand > 0 ist, wird gepüft, ob der Kontostand > 10000 ist.
Sinkt der Kontostand darunter, wird er automatisch auf 15000 erhöht.
Ein erneuter Klick auf den Button stoppt den Timer wieder.
Viel Spaß damit
[code=delphi]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, tlhelp32, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Gold: TLabel;
Button1: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
process = 'game.dat';
function GetID(Const ExeFileName: string; var ProcessId: integer): boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := false;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while integer(ContinueLoop) <> 0 do begin
if (StrIComp(PChar(ExtractFileName(FProcessEntry32.szExeFile)), PChar(ExeFileName)) = 0)
or (StrIComp(FProcessEntry32.szExeFile, PChar(ExeFileName)) = 0) then begin
ProcessId:= FProcessEntry32.th32ProcessID;
result := true;
break;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
function GetAdress(Pidhandle: Integer; BasePointer: Cardinal; Offsets: Array of Cardinal) : Cardinal;
var
i, Anzahl, Data: Integer;
Written: Cardinal;
begin
Written := 4;
Data := 4;
Result := BasePointer;
Anzahl := High(Offsets);
if Anzahl = 1 then
Result := Result + Offsets[1]
else begin
for i := 1 to Anzahl do begin
ReadProcessMemory(Pidhandle, Pointer(Result), @Result, Data, Written);
Result := Result + Offsets[i];
end;
end;
end; // function GetAdress
procedure TForm1.Button1Click(Sender: TObject);
begin
if Timer1.Enabled then
Timer1.Enabled := False
else
Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
Pid: Integer;
Pidhandle, lBuf, lBuf2, NewValue, Data: Integer;
Address, Written: Cardinal;
Offsets: Array of Cardinal;
begin
Pid := 0;
Data := 4;
Address := $0096c9b0;
SetLength (Offsets, 3);
Offsets[1] := $0C;
Offsets[2] := $34;
NewValue := $3A98;
if GetID(process, Pid) then begin
Pidhandle := OpenProcess(PROCESS_ALL_ACCESS,False,Pid);
try
lBuf := GetAdress(Pidhandle, Address, Offsets);
ReadProcessMemory(Pidhandle, Pointer(lBuf), @lBuf2, Data, Written);
if lBuf2 > 0 then
if lBuf2 < 10000 then
WriteProcessMemory(Pidhandle, Pointer(lBuf), @NewValue, Data, Written);
Gold.Caption := 'Gold : '+IntToStr(lBuf2);
finally
closehandle(Pidhandle);
end;
end;
SetLength (Offsets, 0);
end;
end.
[/code]
Nach dem Klick auf den Button wird ein Timer gestartet, der jede Sekunde prüft, ob das Spiel geöffnet ist und wenn ja, wie der Kontostand ist.
Sobald der Kontostand > 0 ist, wird gepüft, ob der Kontostand > 10000 ist.
Sinkt der Kontostand darunter, wird er automatisch auf 15000 erhöht.
Ein erneuter Klick auf den Button stoppt den Timer wieder.
Viel Spaß damit
[code=delphi]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, tlhelp32, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Gold: TLabel;
Button1: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
process = 'game.dat';
function GetID(Const ExeFileName: string; var ProcessId: integer): boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := false;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while integer(ContinueLoop) <> 0 do begin
if (StrIComp(PChar(ExtractFileName(FProcessEntry32.szExeFile)), PChar(ExeFileName)) = 0)
or (StrIComp(FProcessEntry32.szExeFile, PChar(ExeFileName)) = 0) then begin
ProcessId:= FProcessEntry32.th32ProcessID;
result := true;
break;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
function GetAdress(Pidhandle: Integer; BasePointer: Cardinal; Offsets: Array of Cardinal) : Cardinal;
var
i, Anzahl, Data: Integer;
Written: Cardinal;
begin
Written := 4;
Data := 4;
Result := BasePointer;
Anzahl := High(Offsets);
if Anzahl = 1 then
Result := Result + Offsets[1]
else begin
for i := 1 to Anzahl do begin
ReadProcessMemory(Pidhandle, Pointer(Result), @Result, Data, Written);
Result := Result + Offsets[i];
end;
end;
end; // function GetAdress
procedure TForm1.Button1Click(Sender: TObject);
begin
if Timer1.Enabled then
Timer1.Enabled := False
else
Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
Pid: Integer;
Pidhandle, lBuf, lBuf2, NewValue, Data: Integer;
Address, Written: Cardinal;
Offsets: Array of Cardinal;
begin
Pid := 0;
Data := 4;
Address := $0096c9b0;
SetLength (Offsets, 3);
Offsets[1] := $0C;
Offsets[2] := $34;
NewValue := $3A98;
if GetID(process, Pid) then begin
Pidhandle := OpenProcess(PROCESS_ALL_ACCESS,False,Pid);
try
lBuf := GetAdress(Pidhandle, Address, Offsets);
ReadProcessMemory(Pidhandle, Pointer(lBuf), @lBuf2, Data, Written);
if lBuf2 > 0 then
if lBuf2 < 10000 then
WriteProcessMemory(Pidhandle, Pointer(lBuf), @NewValue, Data, Written);
Gold.Caption := 'Gold : '+IntToStr(lBuf2);
finally
closehandle(Pidhandle);
end;
end;
SetLength (Offsets, 0);
end;
end.
[/code]
Es gibt 10 verschiedene Typen von Personen, die, die ich mag und die, die ich nicht verstehen kann...