Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет показа сообщений ShowMessage() и др. Запрет показа сообщений ShowMessage() и  
:(
    Опции темы
fridkaratel
Дата 7.11.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



Описание:
Имеется программа, к которой подлючен мой DLL. Программа иногда инфоррмирует пользователя, например, о завершении какого-либо действия. Я написал DLL, которая избавила бы пользователя от надоедливых окошек и выводила все сообщения на мою форму в виде отчетов.

Задача:
Как запретить показ окон сообщений, как через ShowMessage(), так и через Application->MessageBox, т.е. перехватывать их, узнавать выводимое сообщение, но не показывать на экран...
PM   Вверх
FREEDEV
Дата 7.11.2007, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: нет
Всего: 3



попробуй обработать WM_NOTIFY Message в PreTranslateMessage
или воспользуйся макросом ON_NOTIFY
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
fridkaratel
Дата 8.11.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



Цитата(FREEDEV @  8.11.2007,  05:31 Найти цитируемый пост)
попробуй обработать WM_NOTIFY Message в PreTranslateMessageили воспользуйся макросом ON_NOTIFY

Можно поподробней (признателен, если с кодом тоже ;) )
PM   Вверх
FREEDEV
Дата 8.11.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: нет
Всего: 3



Код

BOOL ТвойКласс::PreTranslateMessage(MSG* pMsg) 
{
switch(pMsg->message)
{
case WM_NOTIFY:
MessageBox("Сообщение получено!"); 
break;
}

return CDialog::PreTranslateMessage(pMsg);
}

--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
jonie
Дата 8.11.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



падчить ?) благо DLL способствует ) переносимость ниже плинтуса, но тоже вариант)

P.S. мне кажется речь шла вообще о Builder-е ....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
fridkaratel
Дата 8.11.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



Я немного знаком с MFC... этот вариант поможет когда есть исходники приложения. Исходников приложения нет, поэтому вряд ли это подойдет...

Мне надо, чтоб MessageBox'ы, создаваемые приложением стороннего разработчика не появлялись. Стоит ли вообще обрабатывать оконные сообщение? Ведь они к окну приходят?

Подробное описание задачи:
есть программа стороннего разработчика. Исходников от нее нет, к тому же она запакована пакером Themida... Она постоянно показывает разны сообщения как через ShowMessage(), так и через Application->MessageBox()... Они появляются очень часто и надоедают... 

Я хочу написать DLL и все эти сообщения перехватывать, т.е. не показывать, а записывать, ну скажем, в файл... или куда еще - не важно... Главное - знать, что на них написано, чтобы обработать ту информацию, которую эти сообщения передают...
PM   Вверх
jonie
Дата 9.11.2007, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



тогда 99% падчить код (это можно сделать прямо длл-кой область та одна будет - благодать)...Т.е. найти импорт и направить его на внетрении функции DLL-ки, вообще говоря не должно быть архисложной проблемой...
например так (только поставить соотв. права на запись не забыть, а то Access vialation whan write полчимс)
Код

typedef DWORD (__stdcall *pmyMEssageBox)(DWORD a, LPWSTR str, DWORD c, DWORD d);
    pOld = (pmyMEssageBox)старый_адрес_MessageBoxА;
    pmyMEssageBox point = (pmyMEssageBox)Адрес_ГдеЛежитАдресJMPИнструкцииНаСтарый_MessageBox;
    *(pmyMEssageBox*)point = myMEssageBoxFunction; 

ну и вообще почитайте про подмену функций путем внедрения длл в процесс 8)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
fridkaratel
Дата 9.11.2007, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



ок, почитаю... а есть еще варианты какие-нибудь?

Это сообщение отредактировал(а) fridkaratel - 9.11.2007, 07:33
PM   Вверх
586
Дата 9.11.2007, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Перехватывай функции MessageBoxA, MessageBoxW, CreateWindowExA, CreateWindowExW.
При работе ф-ции ShowMessage создаётся окно, класса TMessageForm. Убираешь стиль WS_VISIBLE, создаёшь окно. Хендл окна используешь в своих целях, т.е. можешь получить класс TForm и найти TLabel (если он там есть) и оттуда текст. Потом ищешь кнопку OK и нажимаешь.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.