|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.12.2011, 15:32 | #1 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 69
|
Отлов появления месседж-бокса с ошибкой.
Всем доброго времени суток! Есть некое консольное приложение, которое время от времени открывает месседж-боксы с сообщением об ошибке, которые собственно нужно закрывать для продолжения выполнения этого приложения. Вопрос: Как отловить появление месседж-бокса? Желательно ещё сразу узнать его дескриптор, чтоб закрыть...
|
14.12.2011, 09:34 | #2 | |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Цитата:
Как видите не простое задание, так что советую пересмотреть вариант решения внимательно посмотреть на "корень зла" и почему оно выдает эти ошибки, чтобы устранить их. |
|
14.12.2011, 14:52 | #3 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 69
|
Думал уже насчет перехвата, но это довольно сложно. Я даже понятия не имею как мне найти ту функцию, которая вызывает этот месседж-бокс. По идее можно поставить таймер с FindWindow(), но это тоже не красиво. А через хуки такое сделать нельзя?
Насчет ошибок... Приложение (Сервер Counter-Strike) это не моё и естественно иходников нет. |
14.12.2011, 18:43 | #4 |
Форумчанин
Регистрация: 05.10.2011
Сообщений: 368
|
1. через стандартный механизм хуков
2. внедриться в целевую программу, и перехватывать функцию MessageBoxA/W
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
|
15.12.2011, 07:31 | #5 |
Форумчанин
Регистрация: 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 произвести все вышепопунктамописанное.
Нет, ну правда..
|
15.12.2011, 15:38 | #6 |
Форумчанин
Регистрация: 09.09.2008
Сообщений: 395
|
StIX-S, я бы на вашем месте открыл дизассемблер, нашел место где вызывается этот MessageBoxA и попросту "занопил" его (т.е. вместо него поставил команду (nop) которая ничего не делает) и потом занес в eax число 1 (что соотв. IDOK (либо другое число если имеются другие кнопки в MessageBoxA))
|
15.12.2011, 23:38 | #7 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 69
|
Всем спасибо, буду думать. К сожалению ассемблер не знаю.
|
16.12.2011, 07:49 | #8 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
Так вы скажите что за программа, уж поможем вам.
Нет, ну правда..
|
16.12.2011, 08:19 | #9 | |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Цитата:
|
|
17.12.2011, 18:55 | #10 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 69
|
Целевое приложение - сервер игры Counter-Strike, как и писалось выше.
Я пишу небольшую програмульку, для удобного запуска и контроля этого сервера. Хотелось бы обойтись без подгрузки лишних dll, а также без модификации файлов сервера. Буду очень рад, если поможете |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Причины появления ошибок | 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 |