Hallo zusammen.
Bin vor 2 Tagen auf das Tutorial für Delphi hier im Forum gestossen und habe es durchgearbeitet und bin nun bei den ReadProcessMemory / Write angekommen.
Nun habe ich das auf und ab probiert und verstehe die argumente die man mit der funktion ausführt nicht ganz, kann mir da wer auf die sprünge helfen?
nach mehreren fehlermeldungen konnte ich das programm entlich mal kompelieren, es kam dann aber der fehler " Project xyz raised exception class EAccessViolation with message ' Access violation at address 005A81B in module 'XYZ.exe'. Write of address 135CFED8' ", wie kann ich diesen beheben?
Der code ist momentan noch ziemlich kurz gehalten.
Bin vor 2 Tagen auf das Tutorial für Delphi hier im Forum gestossen und habe es durchgearbeitet und bin nun bei den ReadProcessMemory / Write angekommen.
Nun habe ich das auf und ab probiert und verstehe die argumente die man mit der funktion ausführt nicht ganz, kann mir da wer auf die sprünge helfen?
nach mehreren fehlermeldungen konnte ich das programm entlich mal kompelieren, es kam dann aber der fehler " Project xyz raised exception class EAccessViolation with message ' Access violation at address 005A81B in module 'XYZ.exe'. Write of address 135CFED8' ", wie kann ich diesen beheben?
Der code ist momentan noch ziemlich kurz gehalten.
Code:
unit readmemory;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
ThreadID: Integer;
ProcessID, data: Integer;
wnd: HWnd;
write: cardinal;
v1: Cardinal;
buf: PWideChar;
WindowHandle, mynumber: Integer;
address: Cardinal;
size, number: NativeUInt;
begin
v1 := 1000;
address := $72BC11AD3C;
mynumber := 1;
size := 1234567;
number := 8;
wnd := FindWindow(nil, 'Calculator');
if wnd <> 0 then
begin
ThreadID := GetWindowThreadProcessID(wnd, @ProcessID);
WindowHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessID);
Label1.Caption := IntToStr(ThreadID);
buf^ :=Chr(v1);
WriteProcessMemory(WindowHandle, ptr(address), @buf, size, number);
Label1.Caption := string(buf);
CloseHandle(WindowHandle);
end
else
ShowMessage ('Fehler!');
end;
end.