![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 70
|
![]()
Всем доброго времени суток! Есть некое консольное приложение, которое время от времени открывает месседж-боксы с сообщением об ошибке, которые собственно нужно закрывать для продолжения выполнения этого приложения. Вопрос: Как отловить появление месседж-бокса? Желательно ещё сразу узнать его дескриптор, чтоб закрыть...
|
![]() |
![]() |
![]() |
#2 | |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]() Цитата:
Как видите не простое задание, так что советую пересмотреть вариант решения ![]() |
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 70
|
![]()
Думал уже насчет перехвата, но это довольно сложно. Я даже понятия не имею как мне найти ту функцию, которая вызывает этот месседж-бокс. По идее можно поставить таймер с FindWindow(), но это тоже не красиво. А через хуки такое сделать нельзя?
Насчет ошибок... Приложение (Сервер Counter-Strike) это не моё и естественно иходников нет. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 05.10.2011
Сообщений: 368
|
![]()
1. через стандартный механизм хуков
2. внедриться в целевую программу, и перехватывать функцию MessageBoxA/W
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
|
![]() |
![]() |
![]() |
#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 произвести все вышепопунктамописанное.
Нет, ну правда..
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 09.09.2008
Сообщений: 395
|
![]()
StIX-S, я бы на вашем месте открыл дизассемблер, нашел место где вызывается этот MessageBoxA и попросту "занопил" его (т.е. вместо него поставил команду (nop) которая ничего не делает) и потом занес в eax число 1 (что соотв. IDOK (либо другое число если имеются другие кнопки в MessageBoxA))
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 70
|
![]()
Всем спасибо, буду думать. К сожалению ассемблер не знаю.
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
![]()
Так вы скажите что за программа, уж поможем вам.
Нет, ну правда..
|
![]() |
![]() |
![]() |
#9 | |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 70
|
![]()
Целевое приложение - сервер игры 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 |