【问题标题】:MessageBox prevents exiting from applicationMessageBox 阻止退出应用程序
【发布时间】:2014-01-15 10:38:03
【问题描述】:

我们的应用程序加载有时会弹出 MessageBoxes 的 3rd 方 DLL。 我们注意到,有时我们不能只在有打开的 MessageBox 时使用 exit(0)。

在这种情况下我们怎么还能强制存在?

谢谢

【问题讨论】:

  • 抱歉,Windows Vista 及更高版本

标签: windows modal-dialog exit messagebox


【解决方案1】:

看起来你丑陋的 DLL 从 DLL_THREAD_DETACHDLL_PROCESS_DETACH 中调用 MessageBox(或其他)。

如果这发生在同一个线程(即调用exit 的线程)中,您可以尝试在应用程序退出之前调用PostQuitMessage。这应该中止任何消息循环。如果这发生在另一个线程中 - 您可以调用 PostThreadMessage

还有一个选项可以通过挂钩适当的模块 (Exe/Dll) 导入表来拦截对 Win32 API 函数的调用。由 J.Richter 发明(如果我没记错的话)。 http://www.player.idv.tw/prog/index.php/APIHook

【讨论】:

    【解决方案2】:

    如果你想使用蛮力,你可以调用TerminateProcess() 函数。我不确定这是个好主意,您可能想检测是否有一个打开的消息框并发送关闭它(例如使用FindWindow()

    看看MSDN

    【讨论】:

    • 是否因为 MessageBox 是模态的而挂起?我找到了特定窗口的句柄,它不会用 CloseWindow() 关闭,我在这里遗漏了什么吗?
    • 你可以尝试给他发送一个 [ESC] 按键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2023-04-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多