Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Языки программирования

Важная информация

Языки программирования Изучаем С++, Sql, php, Lua, Python

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.05.2011, 13:16   #1
HuntsMan
Ученый
 
Аватар для HuntsMan
 
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
HuntsMan На верном пути
По умолчанию FindWindow (С++)

Пытаюсь получить окно через FindWindow, использую почти как в tiawps:
Код:
    char applicationName[] = "World of Warcraft";
    HWND WindowsHandle = FindWindow(0, (LPCWSTR)applicationName);
Но почему-то не находит окно (окно точно запущено ) Искал в инете, но ничего толкового не нашел. Посоветуйте что-нибудь пожалуйста, а то в WinAPI я не шибко силен
HuntsMan вне форума   Ответить с цитированием
Старый 12.05.2011, 13:25   #2
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Объявите applicationName как wchat_t* и оберните строку в _T() (если макрос определен)
LordJZ вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
HuntsMan (12.05.2011)
Старый 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
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Йоха Посмотреть сообщение
#include <tchar.h>
TCHAR applicationName[] = _T("World of Warcraft");

или в свойствах проекта отключите юникод
Ага, или FindWindowA
LordJZ вне форума   Ответить с цитированием
Старый 12.05.2011, 20:14   #5
HuntsMan
Ученый
 
Аватар для HuntsMan
 
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
HuntsMan На верном пути
По умолчанию

Спасибо Вот ещё вопрос, пытаюсь приплести туда 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.
HuntsMan вне форума   Ответить с цитированием
Старый 12.05.2011, 20:28   #6
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от HuntsMan Посмотреть сообщение
Спасибо Вот ещё вопрос, пытаюсь приплести туда BaseAddress. Пытаюсь использовать VirtualQueryEx.
Это лишнее все.

Следующий фрагмент читает из памяти процесса 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
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от Йоха Посмотреть сообщение
Это лишнее все.

Следующий фрагмент читает из памяти процесса wow_process_handle по адресу 0x008BBBC0, 4 байта и помещает их в массив locale

Код:
char locale[4];
DWORD BaseAddress = 0x008BBBC0, BytesRead;
ReadProcessMemory(wow_process_handle, (LPCVOID)BaseAddress, &locale, 4, &BytesRead))
А как же ASLR? Там рандомный базовый адрес... Или тут автоматом это учитывается?
TOM_RUS вне форума   Ответить с цитированием
Старый 13.05.2011, 06:09   #8
HuntsMan
Ученый
 
Аватар для HuntsMan
 
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
HuntsMan На верном пути
По умолчанию

Ну вот я с учетом базового адреса и хочу попытатся прочитать Вот только как его узнать..(
HuntsMan вне форума   Ответить с цитированием
Старый 13.05.2011, 09:23   #9
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от TOM_RUS Посмотреть сообщение
А как же ASLR? Там рандомный базовый адрес... Или тут автоматом это учитывается?
нет, ASLR тут не учитывается. Пока я отключил эту фигню в реестре и не парюсь.

Надо поискать как читать адрес с учетом этой 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.
Йоха вне форума   Ответить с цитированием
Старый 13.05.2011, 09:23   #10
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

http://www.mmowned.com/forums/world-...ml#post2002767
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
HuntsMan (23.05.2011)
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 05:09. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot