MessageBox предотвращает выход из приложения - PullRequest
0 голосов
/ 13 марта 2012

Наше приложение загружает сторонние DLL, которые иногда выдают MessageBoxes.Мы заметили, что иногда мы не можем просто использовать exit (0), когда есть открытый MessageBox.

Как мы можем все еще форсировать существование в таком случае?

Спасибо

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Похоже, ваши уродливые DLL-вызовы MessageBox (или что-то еще) из DLL_THREAD_DETACH или DLL_PROCESS_DETACH.

Если это происходит в том же потоке (то есть в потоке вызовов exit), вы можете попытаться вызвать PostQuitMessage вправо до выхода из приложения.Это должно прервать любой цикл обработки сообщений.Если это происходит в другом потоке - вы можете вызвать PostThreadMessage.

Также есть возможность перехватывать вызовы функций Win32 API, перехватывая соответствующую таблицу импорта модулей (Exe / Dll).Придумано Ю.Рихтером (если я правильно помню).http://www.player.idv.tw/prog/index.php/APIHook

0 голосов
/ 13 марта 2012

Если вы хотите использовать грубую силу, вы можете вызвать функцию TerminateProcess().Я не уверен, что это хорошая идея, вы можете определить, есть ли открытое окно сообщения, и отправить его близко (например, с помощью FindWindow())

Взгляните на MSDN .

...