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.