Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2011, 15:32   #1
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
Сообщение Отлов появления месседж-бокса с ошибкой.

Всем доброго времени суток! Есть некое консольное приложение, которое время от времени открывает месседж-боксы с сообщением об ошибке, которые собственно нужно закрывать для продолжения выполнения этого приложения. Вопрос: Как отловить появление месседж-бокса? Желательно ещё сразу узнать его дескриптор, чтоб закрыть...
StIX-S вне форума Ответить с цитированием
Старый 14.12.2011, 09:34   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от StIX-S Посмотреть сообщение
Всем доброго времени суток! Есть некое консольное приложение, которое время от времени открывает месседж-боксы с сообщением об ошибке, которые собственно нужно закрывать для продолжения выполнения этого приложения. Вопрос: Как отловить появление месседж-бокса? Желательно ещё сразу узнать его дескриптор, чтоб закрыть...
Не там смотрите. Но если совсем извращенец (в шуточной форме), то нужно узнать приложение которые выкидывает MessageBox 32х или 64х битное, потом писать .dll и программу, чтобы перехватывать API MessageBox ну впихнуть пустышку, не вызывать оригинал API. А ваше приложение будет висеть в памяти -> искать нужное консольное приложение, аттачить к нему .dll (например через хуки), а там уже .dll будет перехватом заниматься.

Как видите не простое задание, так что советую пересмотреть вариант решения внимательно посмотреть на "корень зла" и почему оно выдает эти ошибки, чтобы устранить их.
BOBAH13 вне форума Ответить с цитированием
Старый 14.12.2011, 14:52   #3
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
Сообщение

Думал уже насчет перехвата, но это довольно сложно. Я даже понятия не имею как мне найти ту функцию, которая вызывает этот месседж-бокс. По идее можно поставить таймер с FindWindow(), но это тоже не красиво. А через хуки такое сделать нельзя?

Насчет ошибок... Приложение (Сервер Counter-Strike) это не моё и естественно иходников нет.
StIX-S вне форума Ответить с цитированием
Старый 14.12.2011, 18:43   #4
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

1. через стандартный механизм хуков
2. внедриться в целевую программу, и перехватывать функцию MessageBoxA/W
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 15.12.2011, 07:31   #5
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Если user32.dll грузится статически программой:
1. Изменить импорт целевой программы прописав в нем библиотеку перехвата.
2. В dllmain осуществить перехват MessageBoxExW/ExA
3. В обработчике перехвата проверять текст сообщения и заголовка окна в параметрах функций на соответствие тому, который выдается при ошибке
4. При совпадении функцию не вызывать просто в eax возвращать TRUE, ну или IDYES/NO, в зависимости от того, что за окно вы хотите подавить.
5. ????
6. PROFIT
Если же динамически, то перехватить сперва LdrLoadDll!ntdll.dll и в обработчике перехвата после загрузки user32.dll произвести все вышепопунктамописанное.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 15.12.2011, 15:38   #6
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

StIX-S, я бы на вашем месте открыл дизассемблер, нашел место где вызывается этот MessageBoxA и попросту "занопил" его (т.е. вместо него поставил команду (nop) которая ничего не делает) и потом занес в eax число 1 (что соотв. IDOK (либо другое число если имеются другие кнопки в MessageBoxA))
zotox вне форума Ответить с цитированием
Старый 15.12.2011, 23:38   #7
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
Сообщение

Всем спасибо, буду думать. К сожалению ассемблер не знаю.
StIX-S вне форума Ответить с цитированием
Старый 16.12.2011, 07:49   #8
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Так вы скажите что за программа, уж поможем вам.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 16.12.2011, 08:19   #9
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от zotox Посмотреть сообщение
StIX-S, я бы на вашем месте открыл дизассемблер, нашел место где вызывается этот MessageBoxA и попросту "занопил" его (т.е. вместо него поставил команду (nop) которая ничего не делает) и потом занес в eax число 1 (что соотв. IDOK (либо другое число если имеются другие кнопки в MessageBoxA))
Дельный вариант, подключаюсь как решение
BOBAH13 вне форума Ответить с цитированием
Старый 17.12.2011, 18:55   #10
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
Сообщение

Целевое приложение - сервер игры Counter-Strike, как и писалось выше.

Я пишу небольшую програмульку, для удобного запуска и контроля этого сервера. Хотелось бы обойтись без подгрузки лишних dll, а также без модификации файлов сервера.

Цитата:
Сообщение от yuran666666 Посмотреть сообщение
Так вы скажите что за программа, уж поможем вам.
Буду очень рад, если поможете
StIX-S вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Причины появления ошибок mazzahaker Общие вопросы C/C++ 6 12.12.2011 11:28
Задержка появления строк darkahoy Общие вопросы .NET 6 12.11.2010 21:57
Задержка появления окна. DIMANJ Общие вопросы Delphi 5 09.10.2009 21:05
Рисунок. Метод появления. NSvirus Паскаль, Turbo Pascal, PascalABC.NET 1 23.06.2009 01:40
Плавное появления формы Claster Помощь студентам 4 12.11.2008 23:59