![]() |
WriteProcessMemory funktioniert nicht
Guten Abend,
ich habe vor einigen Tagen eine Prozedur geschrieben, die mithilfe von WriteProcessMemory Werte in einem Spiel verändert. Doch nach kleinen Veränderungen funktioniert diese leider nicht mehr, und ich finde den Fehler einfach nicht... Die Adresse ist statisch, werden beim Neustart des Spiels nicht verändert. Hier der Code, ich hoffe jemand findet den Fehler :D
Delphi-Quellcode:
const
WindowTitle = 'SPIEL-NAME'; Address = $00431CA8; NumberOfBytes = 1; procedure TForm1.setlives(lives: integer); begin if DX_running then // wenn das Spiel läuft begin GetMem(buf,1); ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); try buf^ := Chr(Lives); WriteProcessMemory(HandleWindow,ptr(Address), buf, NumberOfBytes, write); finally FreeMem(buf); closehandle(HandleWindow); end; end; end; |
Re: WriteProcessMemory funktioniert nicht
Könntest du was mit der Fehlermeldung "Läuft nicht mehr" anfangen? ;)
|
Re: WriteProcessMemory funktioniert nicht
Moin Breeze,
ich finde, Du solltest Deinen Code erst einmal etwas "aufräumen" ;-) Du prüfst nämlich nicht, ob Deine Funktionsaufrufe überhaupt erfolgreich waren. Wenn OpenProcess fehlschlägt, was gerade bei PROCESS_ALL_ACCESS leicht passieren kann, bekommst Du kein gültiges Handle, und WriteProcessMemory muss fehlschlagen. |
Re: WriteProcessMemory funktioniert nicht
Guten abend,
"läuft nicht mehr" bedeutet hier, dass es keinerlei Fehler gibt, die Speicheradresse aber nicht verändert wird. @christian: soll ich nach openprocess überprüfen, ob das Handle=0 ist? |
Re: WriteProcessMemory funktioniert nicht
Rückgabewerte solltest du möglicht immer prüfen :warn:
|
Re: WriteProcessMemory funktioniert nicht
Moin Breeze,
schau Dir doch einfach mal die Dokumentation zu ![]() ![]() Im Fehlerfalle kannst Du Dir dann mit
Delphi-Quellcode:
den Fehler im Klartext anzeigen lassen.
ShowMessage(SysErrorMessage(GetLastError));
|
Re: WriteProcessMemory funktioniert nicht
Nachdem ich WriteProcessMemory aufrufe, spuckt er als Error das aus:
"Das Handle ist ungültig" Ich werde mal ein bisschen probieren... Kann es außerdem sein, dass in der Variable ProcessId gar nichts gespeichert wird?
Delphi-Quellcode:
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); Nächstes Edit :lol: Ich war mal wieder zu voreilig, und habe die Lösung. Einleuchtend ist jetzt, warum er kein richtiges Handle gefunden hat^^ Schließlich habe ich WindowName verwendet, aber nicht vorher bestimmt. Der folgende Code hat also ausgereicht, um das Problem zu beheben :oops: :oops:
Delphi-Quellcode:
Nochmal vielen Dank für eure Tips :angel:
WindowName := FindWindow(nil, WindowTitle);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 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