Vielleicht hilft dir dieser Code weiter. Hab mal einen Game-Trainer gemacht. Getestet allerdings nur unter Win 7 x64.
Hier auch noch ein Thema dazu:
http://www.python-forum.de/viewtopic.php?f=1&t=30162
Code: Alles auswählen
# coding: utf-8
import ctypes
#user32.DLL
user32 = ctypes.windll.user32
#Kernel32.DLL
kernel = ctypes.windll.kernel32
OpenProcess = ctypes.windll.kernel32.OpenProcess
ReadProcessMemory = ctypes.windll.kernel32.ReadProcessMemory
WriteProcessMemory = ctypes.windll.kernel32.WriteProcessMemory
CloseHandle = ctypes.windll.kernel32.CloseHandle
PROCESS_ALL_ACCESS = 0x1F0FFF
WindowName = u"Solitär"
# ToDo - Automatisch pid auslesen
pid = ctypes.c_ulong()
GameWindow = user32.FindWindowW(None, WindowName)
print "Window handel:", GameWindow, "as Hex:", hex(GameWindow)
user32.GetWindowThreadProcessId(GameWindow, ctypes.byref(pid))
print "PID: ", pid
# Dynamische Adresse, welche den Punkte-Wert speichert
# TODO; BasePointer und Offset, damit damit statische lpBaseAddresse gefunden wird
lpBaseAddress = 0x0010A6E4
"""
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680553(v=vs.85).aspx
BOOL WINAPI ReadProcessMemory(
_In_ HANDLE hProcess,
_In_ LPCVOID lpBaselpBaseAddress,
_Out_ LPVOID lpBuffer,
_In_ SIZE_T nSize,
_Out_ SIZE_T *lpNumberOfBytesRead
);
BOOL WINAPI WriteProcessMemory(
_In_ HANDLE hProcess,
_In_ LPVOID lpBaseAddress,
_In_ LPCVOID lpBuffer,
_In_ SIZE_T nSize,
_Out_ SIZE_T *lpNumberOfBytesWritten
);
"""
lpBuffer = ctypes.c_char_p(b'Pointer; Ausgabe des Adressraums')
val = ctypes.c_int()
nSize = len(lpBuffer.value)
lpNumberOfBytesRead = ctypes.c_ulong(0)
#punkte = int(raw_input('Punkte eingeben: '))
new_punkte = ctypes.c_ulong(punkte)
bPointer = ctypes.pointer(new_punkte)
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
# ReadProcessMemory
def read_memory():
if ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, ctypes.byref(lpNumberOfBytesRead)):
ctypes.memmove(ctypes.byref(val), lpBuffer, ctypes.sizeof(val))
print "Aktuelle Punkte: " + str(val.value)
else:
print "Failed."
# WriteProcessMemory
def write_memory():
WriteProcessMemory(hProcess, lpBaseAddress, bPointer, 4, None)
return read_memory()
if __name__ == '__main__':
read_memory()
write_memory()
CloseHandle(hProcess)