Я пытаюсь прочитать память из игрового процесса (так же, как Cheat Engine).Я изучал различные посты, например:
А затем я могу создать свой первый скрипт чтения из памяти.В основном, это имеет 2 шага.Получение дескриптора процесса, а затем считывание адреса памяти из дескриптора.
Но я получаю неправильное значение.
Мой код
import win32gui,win32com.client
import win32api
import ctypes
import win32ui
import win32process
from ctypes import wintypes
### Initializing functions and permissions ###
OpenProcess = ctypes.windll.kernel32.OpenProcess
ReadProcessMemory = ctypes.windll.kernel32.ReadProcessMemory # Method 1
PROCESS_ALL_ACCESS = 0x1F0FFF
PROCESS_QUERY_INFORMATION = 0x0400
PROCESS_VM_OPERATION = 0x0008
PROCESS_VM_READ = 0x0010
PROCESS_VM_WRITE = 0x0020
### End of Initializing session
### Getting process handle ###
HWND = win32ui.FindWindow(None,'My Game').GetSafeHwnd()
PID = win32process.GetWindowThreadProcessId(HWND)[1]
processHandle = OpenProcess(PROCESS_ALL_ACCESS, False, PID) # Why is it zero
### End of Getting process handle ###
### Reading value of a Memory Address ###
ADDRESS = 0x0111FF62
buffer = ctypes.c_char_p("Hello, World".encode('utf-8'))
bufferSize = len(buffer.value)
bytesRead = ctypes.c_ulong(0)
memory_value = ReadProcessMemory(processHandle, ADDRESS, buffer, bufferSize, ctypes.byref(bytesRead)) # Why is it zero
print('Memory Value = ', memory_value)
Значение памяти= 0
Истинное значение, которое я получаю из программы сканирования памяти
Я дважды проверил, является ли мое значение HWNDисправить с помощью функции win32gui.SetForegroundWindow(HWND )
.Это приносит окна на передний план.Так что я почти уверен, что моя программа неверна, пока не появится строка для HWND.