Можно ли заблокировать окно сообщения от существующей DLL? - PullRequest
2 голосов
/ 11 января 2011

Я работаю с C # winforms Application. Я dll в своем проекте, когда при вызове этой функции из этой dll я получаю нежелательный MessageBox от этого. Можно ли заблокировать этот MessageBox?

Ответы [ 4 ]

2 голосов
/ 11 января 2011

Если push доходит до толчка, вы можете запустить поток, который убивает все открытые окна по заголовку, используя WinAPI или библиотеки.

Я бы прибегнул к менее суровым механизмам, таким как сначала изменение dll или предоставление запроса на изменение нужным людям.

1 голос
/ 11 января 2011

Нет хорошего варианта избавиться от окна сообщения, если это сторонний dll.

Однако, поскольку C # компилируется в IL, вы можете просмотреть байт-код и удалить вызов на MessageBox.Show или заменить его вызовом на Trace.WriteLine. Вы можете сделать это, например, используя инструменты ildasm.exe / ilasm.exe, поставляемые с SDK.

0 голосов
/ 11 января 2011

Если ваш dll является управляемым кодом, вы можете декомпилировать его и удалить вызов MessageBox, как предложено 0xA3. Если ваш dll является нативным, вы можете использовать перехват API . Пример перехвата WinAPI вы можете найти здесь . Это на C ++, но может быть легко переведено на C #.

0 голосов
/ 11 января 2011

Вы можете изучить эту dll с помощью hex-редактора, отладчика или некоторого средства просмотра ресурсов, чтобы узнать, как создается диалоговое окно, а затем подписаться на это событие Windows (например, OnCreate - просматривайте документы WinAPI для получения информации о функциях создания Windows).В вашем обработчике событий попробуйте отключить диалоговое окно и посмотреть, довольна ли функция dll тем, что диалоговое окно не отображалось

...