BOOL ТвойКласс::PreTranslateMessage(MSG* pMsg)
{
switch(pMsg->message)
{
case WM_NOTIFY:
MessageBox("Сообщение получено!");
break;
}
return CDialog::PreTranslateMessage(pMsg);
}
Запрет показа сообщений ShowMessage() и др.
Имеется программа, к которой подлючен мой DLL. Программа иногда инфоррмирует пользователя, например, о завершении какого-либо действия. Я написал DLL, которая избавила бы пользователя от надоедливых окошек и выводила все сообщения на мою форму в виде отчетов.
Задача:
Как запретить показ окон сообщений, как через ShowMessage(), так и через Application->MessageBox, т.е. перехватывать их, узнавать выводимое сообщение, но не показывать на экран...
Как я понял, в конечном итоге надо избавить от MessageBox-ов. И если твоя длл уже в пространстве процесса, так просто перехвати MessagBoxA и MessageBoxW и все. О том как это сделать гугли перехват АПИ функций, или сразу сходи на
TApplicationEvent сможет такое сделать?
перехвату апи функций. в частности MS-REMа. В первой статье цикла вроде был пример перехвата именно MessageBox-ов. Одно хочу подчеркнуть, тебе не надо создать никаких хуков, так как твоя длл уже в аддрессном пространстве целевой программы. Не поймешь там, гугл тебе в руки, материало про это просто немеряно.
а как такой вариант:
Как я понял, тебе надо, чтоб MessageBox создаваемые приложением не появлялись. Если это так, то тем более, нафига тебе обрабатывать оконные сообщение? Ведь они к окну приходят?
Кароч, если я чего не так понял, скажи конкретно, что у тебя есть, и чего ты хочешь добиться? ибоя запутался совсем %)
Я хочу написать DLL и все эти сообщения перехватывать, т.е. не показывать, а записывать, ну скажем, в файл... или куда еще - не важно... Главное - знать, что на них написано, чтобы обработать ту информмацию, которую эти сообщения передают...
А для MessageBox все написано в первом посте.
Итого, тебе надо загрузить длл в процесс, для этого в инициализации длл ставишь глобальный хук (читай про SetWindowsHookEx).
в нужном процессе (ну там по имени его идентифицируешь или еще как) ставишь хук (как - читай статьи MS-REMa на васме) на MessageBoxA MessageBoxW. Тогда все вызовы этих функций будут приходить в твою функцию, а там выдираешь из параметров что хочешь и возвращаешь нужный результат без вызова оригинального MessageBox-а.
Как это сделать, я тебе писать на форуме не буду, потому-что информации полно, чть искать я уже говорил.
Если не поможет, то значит прога создает свои диалоговые окна. Как в таком случае быть, тоже можно найти в нете.