temtriss Опубликовано 12 мая, 2018 Поделиться Опубликовано 12 мая, 2018 Всем прив. Возникла небольшая проблема, не могу разобраться почему. Собственно писал обход запрета запуска 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 Хотя поставленая задача была решена, но, мне очень интересно, почему мне не получить заголовок окна О_о Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 12 мая, 2018 Поделиться Опубликовано 12 мая, 2018 Думаю так будет лучше и проще, попробуй описать свой функционал в колбеке. Спойлер 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; Но оно не должно мешать. Есть подозрения, что твой хук конфликтует с оригинальной функцией, но это надо отлаживать код, больше и идей нет. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
temtriss Опубликовано 12 мая, 2018 Автор Поделиться Опубликовано 12 мая, 2018 33 минуты назад, partoftheworlD сказал: Но оно не должно мешать. Ну по сути да, просто задался вопросом почему так, 43 строки лишние написал)) Да и задача решена. 36 минут назад, partoftheworlD сказал: попробуй описать свой функционал в колбеке Так CALLBACK - дефайн __stdcall Так что так и есть. Да и под отладчиком все вроде нормально да и мой нумератор вызывается вместо оригинального. 44 минуты назад, partoftheworlD сказал: ничего необычного в нем нет, ну не считая этого Оббил переменную 0 с двух сторон Ладно, я еще этот вопрос завтра помучаю, сегодня я до функции декода пакетов дорвался, уже желания с нумератором нету копаться) Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 12 мая, 2018 Поделиться Опубликовано 12 мая, 2018 27 минут назад, temtriss сказал: Так CALLBACK - дефайн __stdcall я имел ввиду внутри этого колбека/функции вдруг заработает? пробовал воспроизвести твой код, но в итоге все работало, возможно где-то ошибка нумератора, да и других вариантов нет. BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 13 мая, 2018 Поделиться Опубликовано 13 мая, 2018 18 часов назад, temtriss сказал: Но по итогу игра получает FALSE всегда, даже для тех окон которые прятать не нужно. т.к. я не получаю заголовок окна. В принципе работает и ладно, но очень хотелось бы разобратся почему так. GetLastError показывает 2 кода 0x12 или 0x2 Судя по коду игра может всегда возвращать FALSE. Других return не видно. Возможно еще стоит написать обработчик исключения и вывод информации. Можно прогнать под пошаговой отладкой в отладчике Коды ошибок при работе с файлами Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 15 мая, 2018 Поделиться Опубликовано 15 мая, 2018 вероятно надо IsWindowVisible проверку Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения