ReadProcessMemory mit ctypes
im arbeiten auf ein wenig solitär-trainer. Ich weiß nicht, warum die Funktion ReadProcessMemory nicht funktioniert. Normalerweise gibt es eine Wahr oder Falsch, aber in diesem Fall nichts. Der GetlastError() gibt mir den Fehlercode 6.
#-*- coding: cp1252 -*-
import ctypes, win32ui, win32process ,win32api
PROCESS_ALL_ACCESS = 0x1F0FFF
HWND = win32ui.FindWindow(None,"Solitär").GetSafeHwnd()
print(HWND)
PID = win32process.GetWindowThreadProcessId(HWND)[1]
print(PID)
PROCESS = win32api.OpenProcess(PROCESS_ALL_ACCESS,0,PID).handle
rPM = ctypes.windll.kernel32.ReadProcessMemory
wPM = ctypes.windll.kernel32.WriteProcessMemory
ADDRESS1 = 0x00E97074
ADDRESS2 = ctypes.create_string_buffer(64)
pi = ctypes.pointer(ADDRESS2)
rPM(PROCESS,ADDRESS1,ADDRESS2,64,0)
print(ADDRESS2)
x=ctypes.windll.kernel32.GetLastError()
print(x)
Erste, was zu versuchen, ist die Einstellung der Rückgabetyp der Funktionen in ctypes. Wenn Sie nicht setzen es standardmäßig int und du hast bool. Zweite ist, dass ctypes ist wirklich für C und ist das nicht eine C++ - Bibliothek? Wenn das der Fall ist könnte man schreiben C-wrapper-Funktionen.
Python-version (sieht aus wie 3.X)? Windows-version? 32 - oder 64-bit?
Es ist Python 3.2 und Win7 32bit! Was genau ist eine C++ - Bibliothek?
Python-version (sieht aus wie 3.X)? Windows-version? 32 - oder 64-bit?
Es ist Python 3.2 und Win7 32bit! Was genau ist eine C++ - Bibliothek?
InformationsquelleAutor John Doe | 2012-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie die community-Kommentar zu der MSDN ReadProcessMemory Seite zitieren(sic):
Auch vollständig deklarieren Sie die return-Typen und verwenden Sie die
use_last_error
parameter, woctypes
wird der cacheGetLastError()
Wert intern direkt nach dem Aufruf. Sonst kann es falsch sein. Wenn Sie auf einem 64-bit-system, SIZE_T und Zeiger sind 64-bit-Werte, so ctypes kennen muss, um die Typen zu setzen, bis der stack richtig für den Anruf.Auch, FYI, auch mit den Korrekturen bekomme ich den gleichen Fehler Wert, aber ich wollte nicht zu gehen durch die Mühe der Aktivierung
SE_DEBUG_NAME
.GELÖST
Die folgende Zeile ist das Problem:
win32api.OpenProcess
gibt eine temporärePyHANDLE
dass zerstört wird und schließt das handle, nachdem das handle abgerufen werden.Die Lösung ist zu verwenden:
PROCESS
dann hält diePyHANDLE
Objekt und der Griff bleibt gültig.Ich schrieb eine helper-Funktion aktivieren Sie das Privileg und verifiziert wurde, durch SysInternals ProcessExplorer. Ich musste administrator, es zu tun. Ich habe immer noch den gleichen Fehler. Es ist eine Herausforderung, nun, so werde ich wohl schauen es heute Abend wieder, wobei Python aus dem Bild und C nur. Ich habe dies vor, aber nicht bei Win7.
Hallo Mark, wenn ich dies ausführen: pastebin.com/dCaKiFht ist die Ausgabe: ▼ Nach der memoryviewer ist der Wert 31 @ Adresse1. Alt + 31 = ▼. Die Frage ist also: Warum nicht diese mit "Solitär"
Oh Nein, was ein wenig mistakte! Ich danke Ihnen Sehr!
Kein problem! Auf ALSO, klicken Sie auf die up-vote und akzeptieren checkbox zum markieren der Antwort als nützlich und richtig. Danke!
InformationsquelleAutor Mark Tolonen