Запретить показ ShowMessage в другом приложении
Есть такая задачка... Необходимо перехватить и не показывать окно, созданное через функцию ShowMessage()... Программа, в которой необходимо это сделать, написана на BCB 6, таблицу импорта можно получить... Есть некоторые надумки насчет внедрения DLL и подмены этой функции, но вот не знаю куда и что...
Начну с того, что в WinAPI функции ShowMessage не существует. Эта функция присутствует только в VCL (объявлена в dialogs.hpp). Перехватывать все же тебе придется MessageBoxA или MessageBoxW. Технология называется сплайсингом.
ShowMessage вручную создаёт окно кидает на него кнопку и выводит его. Чтобы перехватить ShowMessage надо перехватить функцию CreateWindowEx и если указан соответствующий класс (надо будет его получить экспериментально), то создать окно и сразу же его закрыть (если при создании окна возвращать ошибку и не создавать окно, то функция ShowMessage генерирует исключение, проверено).
Цитата: ahilles
ShowMessage вручную создаёт окно кидает на него кнопку и выводит его. Чтобы перехватить ShowMessage надо перехватить функцию CreateWindowEx и если указан соответствующий класс (надо будет его получить экспериментально), то создать окно и сразу же его закрыть (если при создании окна возвращать ошибку и не создавать окно, то функция ShowMessage генерирует исключение, проверено).
а есть какие-нибудь наметки кода? чтобы не с нуля писать...? :rolleyes:
Цитата: frid-karatel
а есть какие-нибудь наметки кода? чтобы не с нуля писать...? :rolleyes:
к сожалению сейчас их уже нет. Мне кажется лучше перехватывать не с помощью перехвата функций, а с помощью обычных хуков в своём процессе (в таком случае DLL не нужна), тип хука WH_CBT, код сообщения HCBT_CREATEWND.