【问题标题】:Detecting creation of a MessageBox检测 MessageBox 的创建
【发布时间】:2012-02-23 11:16:01
【问题描述】:

我的应用程序正在加载第 3 方 DLL,其中一些 DLL 打开 MessageBox 窗口。

有没有办法让我检测到这样的窗口何时被打开?

【问题讨论】:

    标签: windows winapi user-interface messagebox


    【解决方案1】:

    您需要CBT hook 才能在显示 MessageBox 窗口时收到通知。您可以通过调用SetWindowsHookEx() function 并为钩子ID 参数指定WH_CBT 来安装它。 hook callback function 将为您提供 MessageBox 窗口的句柄,然后您可以使用它来关闭它。

    如果您确切知道何时创建和显示 MessageBox,那么您可以采用比全局钩子更轻、更简单的方法。这将涉及调用 FindWindowEx function 来获取 MessageBox 窗口的句柄,您也可以使用它来关闭它。

    当然,要正确关闭它,您需要知道它是哪种类型的 MessageBox(即它显示的标准按钮选项),以便您可以模拟对所需按钮的单击。简单地设法让 MessageBox 从屏幕上消失而不提供有效的答案很可能会在库代码方面产生意想不到的结果。

    需要明确指出,这是 DLL 的真的不良行为。除非绝对必要,否则请抛弃任何将如此糟糕的代码强加给您的第 3 方。如果它绝对必要的,那么这是一个危险信号:努力消除它的必要性。您不必编写和维护大量代码来解决他们无法正确处理重大问题的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      相关资源
      最近更新 更多