![]() |
Float-Wert auslesen mithilfe von Readprocessmemory
Hallo, folgendes Problem:
Ich muss einen Wert aus einem Speicher auslesen. Solange der Wert im Format 4 oder 8 Bytes vorliegt, mache ich das mit meiner Funktion f_memoryread:
Delphi-Quellcode:
In Cheat-Engine kann man den Typ eines Wertes einstellen, siehe Bild:
function f_memoryread(WindowTitle:Pansichar;adresse,size:integer):integer;
var p : pointer; puffer : array[0..1] of DWord; BytesRead: DWord; WindowName,ProcessId,ThreadId,HandleWindow : integer; begin p := ptr(adresse); //Adresse umwandeln: WindowName := FindWindow(nil,WindowTitle); //get Handle ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); ReadProcessMemory( HandleWindow, p , @puffer[0], size, BytesRead ); closehandle(HandleWindow);//close f_memoryread := Puffer[0]; end;//of f_memoryread ![]() Wenn ich hier 4Byte wähle, ist der Wert "1149107790". Wenn ich jedoch Float auswähle, ist der Wert "1015,97351074219"! Den 4Byte Wert dieser Adresse (1149107790) auszulesen ist mit der o.g. Funktion kein Problem, jedoch brauch ich den Float-Wert! Für die variable size einfach "float" statt "4" oder "8" zu schreiben, funktioniert nicht! Weiß jemand, wie ich diesen auslese? Oder gibts eine Funktion, mit der man 4Bytes in Float umwandeln kann? Dann könnte ich den Wert ganz normal auslesen und anschließend einfach umwandeln. Bitte um Hilfe, mfg infY |
Re: Float-Wert auslesen mithilfe von Readprocessmemory
Hallo,
ich würde es mal mit dem reellen Typ "Single" probieren. Der belegt übrigens 4 Byte. Grüße vom marabu |
Re: Float-Wert auslesen mithilfe von Readprocessmemory
Zitat:
|
Re: Float-Wert auslesen mithilfe von Readprocessmemory
Zitat:
Delphi-Quellcode:
Jedoch dann kommt die Fehlermeldung:"E2029 '(' erwartet,aber ',' gefunden"!
ReadProcessMemory(HandleWindow,pointer(p),@ausgabe,single,BytesRead);
Mit sizeof(single) gehts, aber da kommt auch nur dieser normale 4 Byte Wert raus(1149107790)! Zitat:
Delphi-Quellcode:
Fehler:"E2003 Undefinierter Bezeichner 'float'!
ReadProcessMemory(HandleWindow,pointer(p),@ausgabe,sizeof(float),BytesRead);
Hat noch jemand eine Idee? :pale: |
Re: Float-Wert auslesen mithilfe von Readprocessmemory
wenn du deinen 4 Byte Fließkommawert lesen willst solltest du dir in Delphi den entsprechenden Typen heraus suchen. Das er in Delphi nicht Float heißt sollte doch nicht das Problem sein.
|
Re: Float-Wert auslesen mithilfe von Readprocessmemory
Zitat:
|
Re: Float-Wert auslesen mithilfe von Readprocessmemory
Okay, mit single gehts doch! Für die, die dasselbe Problem haben hier mal meine Funktion:
Delphi-Quellcode:
puffer : single hatte ich vorher vergessen!
function f_memoryreadfloat(WindowTitle:Pansichar;adresse:integer):single;
var p : pointer; puffer : single; BytesRead: DWord; WindowName,ProcessId,ThreadId,HandleWindow : integer; begin p := ptr(adresse); //Adresse umwandeln: WindowName := FindWindow(nil,WindowTitle); //get Handle ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); ReadProcessMemory( HandleWindow, p , @puffer,sizeof(single), BytesRead ); //READ closehandle(HandleWindow);//close f_memoryreadfloat := Puffer; end;//of f_memoryread danke für eure hilfe mfg infY!! |
Re: Float-Wert auslesen mithilfe von Readprocessmemory
Sorry das ich den hier nochmal raushole ...
Aber hat das mal einer probiert? Bei HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); bekomme ich Grundsätzlich eine 0 also kein handle. (Ich bin mir sicher das ich richtige ProcessID habe) Ich würde mir gerne Infos aus einen Spiel saugen, lesenderweise. Aber wie ichs auch versuche ... es bleibt bei 0 und ich bekomme nix aus dem Memory. Das Beispiel passt vorzüglich zu mir wegen dem Float. Hat da jemand eine Idee woran das liegen könnte? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz