Перейти к содержанию

Рекомендуемые сообщения

Всем прив. Возникла небольшая проблема, не могу разобраться почему.

Собственно писал обход запрета запуска CE/olly/artmoney и прочего. В игре это устроено циклом.

Ищет окна по названию(FindWindowA)

Делает снапшот процессов и прогоняет их(Process32NextW)

Нумерует окна(EnumWindows)

Если что-то прокнуло, дисконект от сервера.

По сути поставленую задачу я решил, хукнул выше указаные функции

в FindWindowA в любом случае возвращаю NULL, В Process32NextW Проверяю нужно ли прятать приложение, если да, то просто обнуляю LPPROCESSENTRY32W и делаю рекурсивный вызов хукнутой Process32NextW.

Далее EnumWindows:

BOOL __stdcall Hooked_EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)
{
	// структура для возвращения оригинальной функции и параметров
	tORGENUMINFO tWinEnumInfo = { lpEnumFunc, lParam };

	// Запускаем наш нумератор и фильтруем то, что не должно видеть приложение :)
	return oEnumWindows(MyEnumWindowsProc, (LPARAM)&tWinEnumInfo);
}

Отрабатывает на ура.

Вызывается мой нумератор:

SIZESTR - дефайн sizeof - 1

static BOOL __stdcall MyEnumWindowsProc(HWND hWnd, LPARAM lParam)
{
	if (hWnd)
	{
		char WindowTitle[1024];
		WindowTitle[0] = WindowTitle[SIZESTR(WindowTitle)] = 0;
		if (GetWindowTextA(hWnd, WindowTitle, SIZESTR(WindowTitle)) > 0) // Я не получаю заголовок окна и возращаю FALSE
            {
        	// Код моего нумератора приводить смысла нету
            }
	}
	return(FALSE);
}

Но по итогу игра получает FALSE всегда, даже для тех окон которые прятать не нужно. т.к. я не получаю заголовок окна. 

В принципе работает и ладно, но очень хотелось бы разобратся почему так.

GetLastError показывает 2 кода

0x12 или 0x2

 

Хотя поставленая задача была решена, но, мне очень интересно, почему мне не получить заголовок окна О_о

Ссылка на комментарий
Поделиться на другие сайты

Думаю так будет лучше и проще, попробуй описать свой функционал в колбеке.

 

Спойлер

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
	char win_text[255];
	if (GetWindowText(hwnd, win_text, sizeof(win_text)))
	{
		CharToOem(win_text, win_text);
		printf("%s\n", win_text);
	}
	return 1;
}

int main()
{
	EnumWindows(&EnumWindowsProc, NULL);
	return 0;
}

 

А твой код вроде правильный, ничего необычного в нем нет, ну не считая этого:

 

7 часов назад, temtriss сказал:

WindowTitle[0] = WindowTitle[SIZESTR(WindowTitle)] = 0;

 

Но оно не должно мешать.

Есть подозрения, что твой хук конфликтует с оригинальной функцией, но это надо отлаживать код, больше и идей нет.

 

image.thumb.png.3f5b22280c110dd79b42537e5a615d5c.png

 

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

33 минуты назад, partoftheworlD сказал:

Но оно не должно мешать.

Ну по сути да, просто задался вопросом почему так, 43 строки лишние написал))

Да и задача решена. 

36 минут назад, partoftheworlD сказал:

попробуй описать свой функционал в колбеке

Так CALLBACK - дефайн __stdcall 

Так что так и есть. Да и под отладчиком все вроде нормально да и мой нумератор вызывается вместо оригинального.

44 минуты назад, partoftheworlD сказал:

ничего необычного в нем нет, ну не считая этого

Оббил переменную 0 с двух сторон :D

 

Ладно,  я еще этот вопрос завтра помучаю, сегодня я до функции декода пакетов дорвался,  уже желания с нумератором нету копаться)

Ссылка на комментарий
Поделиться на другие сайты

27 минут назад, temtriss сказал:

Так CALLBACK - дефайн __stdcall 

я имел ввиду внутри этого колбека/функции вдруг заработает?

пробовал воспроизвести твой код, но в итоге все работало, возможно где-то ошибка нумератора, да и других вариантов нет.

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
Ссылка на комментарий
Поделиться на другие сайты

18 часов назад, temtriss сказал:

Но по итогу игра получает FALSE всегда, даже для тех окон которые прятать не нужно. т.к. я не получаю заголовок окна. 

В принципе работает и ладно, но очень хотелось бы разобратся почему так.

GetLastError показывает 2 кода

0x12 или 0x2

 

Судя по коду игра может всегда возвращать FALSE. Других return не видно. Возможно еще стоит написать обработчик исключения и вывод информации. Можно прогнать под пошаговой отладкой в отладчике

Коды ошибок при работе с файлами

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

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

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.