Наше приложение загружает сторонние DLL, которые иногда выдают MessageBoxes.Мы заметили, что иногда мы не можем просто использовать exit (0), когда есть открытый MessageBox.
Как мы можем все еще форсировать существование в таком случае?
Спасибо
Похоже, ваши уродливые DLL-вызовы MessageBox (или что-то еще) из DLL_THREAD_DETACH или DLL_PROCESS_DETACH.
MessageBox
DLL_THREAD_DETACH
DLL_PROCESS_DETACH
Если это происходит в том же потоке (то есть в потоке вызовов exit), вы можете попытаться вызвать PostQuitMessage вправо до выхода из приложения.Это должно прервать любой цикл обработки сообщений.Если это происходит в другом потоке - вы можете вызвать PostThreadMessage.
exit
PostQuitMessage
PostThreadMessage
Также есть возможность перехватывать вызовы функций Win32 API, перехватывая соответствующую таблицу импорта модулей (Exe / Dll).Придумано Ю.Рихтером (если я правильно помню).http://www.player.idv.tw/prog/index.php/APIHook
Если вы хотите использовать грубую силу, вы можете вызвать функцию TerminateProcess().Я не уверен, что это хорошая идея, вы можете определить, есть ли открытое окно сообщения, и отправить его близко (например, с помощью FindWindow())
TerminateProcess()
FindWindow()
Взгляните на MSDN .