tibiaWindow = FindWindow( L"TibiaClient", NULL);
DWORD PID;
GetWindowThreadProcessId( tibiaWindow, &PID );
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID); //Open Process for Read/Write
short mana = 0;
void* ptr = (void*)hProcess+0x3C2D00;
if( !ReadProcessMemory(hProcess, ptr, &mana, 2, 0) ){
return false;
}
else{
statusBar()->showMessage( QString::number(mana), 3000 );
}
return true;
Это должно прочитать ману из игры, которая находится в tibia.exe + 0x3CD2D00. Но это не сработает. Может кто-нибудь мне помочь? Как получить базовый адрес этого окна?
Чтобы получить базовый адрес модуля в другом процессе, требуется два шага:
EnumProcessModules
модулей, загруженные в процесс, используя EnumProcessModules
.GetModuleFileNameEx
либо GetModuleBaseName
пока не найдете совпадение.Обработчик модуля, который вы получаете с шага 2., является базовым адресом модуля в адресном пространстве запрашиваемого процесса.
0x3CD2D00
вами смещение (0x3CD2D00
) не может быть частью фактического изображения tibia.exe
. Это будет означать, что модуль имеет размер не менее 63 МБ, что звучит не так. Он может находиться в некоторых других статических данных модуля или, возможно, в кучевой памяти, что делает ваш предложенный подход бесполезным.