Zitat von
Reditus:
Hey!
Ich schonwieder!
Ja, DU schon wieder!
Erklär mal bitte im Detail, was Du mit den folgenden drei Zeilen zu tun beabsichtigst. Momentan sieht das nämlich eher aus wie Hand in den Mixer stecken.
Delphi-Quellcode:
GetMem(buf,1);
buf^ := Chr(('Edit1Text decimal = ''$' +IntToHex(Edit1Text, 1)); //Hier ist die Stelle wo ich den Wert aus der Edit Box als Hex einfügen möchte
WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write);
Momentan machst Du da nämlich folgendes:
"Hole ein Byte Speicherplatz und merke die Adresse in buf"
"Schreibe an diese Stelle das Zeichen, dessen
ASCII-Wert dem String 'Edit1Text decimal = ''$' +IntToHex(Edit1Text, 1)); entspricht"
"Schreibe das ominöse Zeichen im Zielprozess an die angegebene Stelle"
Zu Zeile zwei ist zu sagen: Das ist ja wohl der denktechnische Obergau
Erstmal erwartet Chr() eine Zahl als Argument, und nicht irgendwelchen Text. Zum zweiten konvertiert IntToHex wie der Name schon sagt eine ZAHL und keinen Text. Ich vermute mal stark dass Du folgendes wolltest:
buf^ := Chr(StrToInt(Edit1Text));
Dazu sei gleich noch gesagt:
- Es fehlt die Bereichsprüfung (wenn ich da 500 eingebe, macht es BUMM)
- Es empfiehlt sich, TryStrToInt() zu benutzen, damit erspart man sich den try..except Block und der Code sieht übersichtlicher aus.
- Es ist unnötig, sich dynamisch Speicher zu besorgen um den dann per WriteProcessMemory wegzuschreiben. Genauso gut kannst Du Dir statt eines Pointers und GetMem direkt einen Char deklarieren, und dann dessen Adresse an WriteProcessMemory übergeben:
Delphi-Quellcode:
var
MeinZeichen: Char;
[...]
WriteProcessMemory(HandleWindow, Pointer(Address), @MeinZeichen, NumberOfBytes, write);
[...]