【发布时间】:2014-01-15 10:38:03
【问题描述】:
我们的应用程序加载有时会弹出 MessageBoxes 的 3rd 方 DLL。 我们注意到,有时我们不能只在有打开的 MessageBox 时使用 exit(0)。
在这种情况下我们怎么还能强制存在?
谢谢
【问题讨论】:
-
抱歉,Windows Vista 及更高版本
标签: windows modal-dialog exit messagebox
我们的应用程序加载有时会弹出 MessageBoxes 的 3rd 方 DLL。 我们注意到,有时我们不能只在有打开的 MessageBox 时使用 exit(0)。
在这种情况下我们怎么还能强制存在?
谢谢
【问题讨论】:
标签: windows modal-dialog exit messagebox
看起来你丑陋的 DLL 从 DLL_THREAD_DETACH 或 DLL_PROCESS_DETACH 中调用 MessageBox(或其他)。
如果这发生在同一个线程(即调用exit 的线程)中,您可以尝试在应用程序退出之前调用PostQuitMessage。这应该中止任何消息循环。如果这发生在另一个线程中 - 您可以调用 PostThreadMessage。
还有一个选项可以通过挂钩适当的模块 (Exe/Dll) 导入表来拦截对 Win32 API 函数的调用。由 J.Richter 发明(如果我没记错的话)。 http://www.player.idv.tw/prog/index.php/APIHook
【讨论】:
如果你想使用蛮力,你可以调用TerminateProcess() 函数。我不确定这是个好主意,您可能想检测是否有一个打开的消息框并发送关闭它(例如使用FindWindow())
看看MSDN。
【讨论】: