Ich habs raus:
var
...
PidHandle: integer;
PidID : integer;
byteArr : Array of byte;
Const
ProgramName = 'winrar.exe';
function getAddr(start: Cardinal;size: Cardinal; Data: array of Byte): Cardinal;
var
Read: Cardinal;
Value: Array of byte;
Address: Cardinal;
Length: Cardinal;
begin
Result := 0;
Address:= start;
Length:= SizeOf(Data);
SetLength(Value,SizeOf(Data));
while Address <> ((start+size)-SizeOf(Data)) do begin
ReadProcessMemory(PidHandle, Pointer(Address), @Value[0], SizeOf(Data),Length);
//ShowMessage(Format('%x',[Address]));
//ShowMessage(Format('%x',[Value[0]]));
if CompareMem(@Value[0],@Data[0],SizeOf(Data)) then begin
result:=Address;
break;
end;
Inc(Address);
end;
end;
function GetProcessID(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;
Und Die Verwendung der Funktion geht dann so:
procedure TForm1.Button1Click(Sender: TObject);
var
Result: Cardinal;
begin
if GetProcessID(ProgramName, PidId) then
begin
PidHandle := OpenProcess(PROCESS_ALL_ACCESS,False,PidId);
//ShowMessage(InttoStr(PidId));
setlength(byteArr,13);
byteArr[0]:= $5A;
byteArr[1]:= $E8;
byteArr[2]:= $FC;
byteArr[3]:= $6C;
byteArr[4]:= $09;
byteArr[5]:= $00;
byteArr[6]:= $E8;
byteArr[7]:= $BF;
byteArr[8]:= $79;
byteArr[9]:= $09;
byteArr[10]:= $00;
byteArr[11]:= $6A;
byteArr[12]:= $00;
Result:=getAddr($00401000,$000A3000,byteArr);
Memo1.Text:=Format('%x',[Result]);
end;
end;
Vielen Dank für die Hilfe *fg*