tak na moj gust
function MemReadString(Address: Integer): String;
var
NB : LongWord;
p:PByte;
len:integer;
procId : Cardinal;
hProcess:HWND;
begin
Result := '';
GetWindowProcessId(FindWindow(nil, 'Metin2'), procId);
hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, procId);
if ReadProcessMemory(hProcess, Pointer(Address), Pointer(p), sizeof(p^), NB) then begin
len:=0;
while (p^<>0) and (p^<>$0F) and (len<255) do begin
inc(len);
inc(p);
end;
SetLength(Result,len);
ReadProcessMemory(hProcess, Pointer(Address), @Result[1], len, NB);
end;
end;
bocik?
//edit
procedure TForm1.Timer1Timer(Sender: TObject);
var
addr:integer;
begin
if FindWindow(Nil, 'Metin2') <> 0 then begin // pierwszy etap sprawdzanie : czy jest odpalony klient?
addr:=ReadMemInteger(POINTER1)+offset1;
Edit1.Text :='$'+inttohex(addr,8);
Edit2.Text :=MemReadString(addr) ;
end;
end
Naprawde nie rozumiem po co sie chcesz bawic z konwersja, skoro nie musisz...
Jest czasochlonna! Tak samo nie uzywaj
var
Result:string
begin
...
Result:=Result+char(tmp);
...
end;
to wywoluje w twoim kodzie 255 razy
SetLength(Result,Length(Result)+1)
Tak sie jeszcze zastanawialem, co by sie porobilo, gdybys dal
p:char
i nastepnie zrobil ReadProcessMemory(hProcess,Pointer(Address),Pointer(p),1,NB)
Pomijajac fakt ze grzebie nie w swojej pamieci, to powinien konwertowac PChar na String przy
```delphi
Result:=p
(ale nie wiem czy tworzy string od nowa) Poniewaz PChar jest null-terminated, powinien zakonczyc na #0 (no ale nie na $0F)
Czy to pomoglo? Czy wciaz chodzilo o cos innego?