|
Языки программирования Изучаем С++, Sql, php, Lua, Python |
|
Опции темы | Поиск в этой теме | Опции просмотра |
12.05.2011, 13:16 | #1 |
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
FindWindow (С++)
Пытаюсь получить окно через FindWindow, использую почти как в tiawps:
Код:
char applicationName[] = "World of Warcraft"; HWND WindowsHandle = FindWindow(0, (LPCWSTR)applicationName); |
12.05.2011, 13:35 | #3 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
#include <tchar.h>
TCHAR applicationName[] = _T("World of Warcraft"); или в свойствах проекта отключите юникод |
12.05.2011, 13:43 | #4 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
|
12.05.2011, 20:14 | #5 |
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
Спасибо Вот ещё вопрос, пытаюсь приплести туда BaseAddress. Пытаюсь использовать VirtualQueryEx. Тут написано, что нужно передать в аргументе начальный базовый адрес региона, который можно получить через GetSystemInfo. Но там я ничего подобного не нашел Код как-то так получается:
Код:
char locale[4]; OSVERSIONINFO v_info={sizeof(OSVERSIONINFO)}; GetVersionEx(&v_info); MEMORY_BASIC_INFORMATION mbi; VirtualQueryEx(wow_process_handle, v_info.szCSDVersion, &mbi, sizeof(mbi)); ReadProcessMemory(wow_process_handle, (LPCVOID)((DWORD)mbi.BaseAddress + 0x008BBBC0), locale, 4, 0); Последний раз редактировалось HuntsMan; 13.05.2011 в 06:09. |
12.05.2011, 20:28 | #6 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
Следующий фрагмент читает из памяти процесса wow_process_handle по адресу 0x008BBBC0, 4 байта и помещает их в массив locale Код:
char locale[4]; DWORD BaseAddress = 0x008BBBC0, BytesRead; ReadProcessMemory(wow_process_handle, (LPCVOID)BaseAddress, &locale, 4, &BytesRead)) |
|
12.05.2011, 21:50 | #7 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Цитата:
|
|
13.05.2011, 09:23 | #9 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
Надо поискать как читать адрес с учетом этой ASLR. Добавлено через 58 минут Вот порыл в инете, пишут что BaseAddr определяется так : Код:
#include <Windows.h> #include <TlHelp32.h> int _tmain(int argc, _TCHAR* argv[]) { MODULEENTRY32 me32; me32.dwSize = sizeof(MODULEENTRY32); DWORD pid = GetCurrentProcessId(); // тут подставить ИД процесса вов HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid); if (h != INVALID_HANDLE_VALUE) { if (Module32First(h, &me32)) { // по идее нужно сделать проверку на имя модуля что бы me32.szModule было равно wow.exe // но обычно первым идет как раз сам основной экзешник DWORD baseaddr = (DWORD)me32.modBaseAddr; printf("0x%08X\n", baseaddr); } } return 0; } Проверить не могу, на работе Windows XP. Хотя на XP выдает положенные 0x00400000 Последний раз редактировалось Йоха; 13.05.2011 в 08:33. |
|
|
|