检测MessageBox的创build

我的应用程序正在加载第三方DLL,并且这些DLL中的一些打开MessageBox窗口。

有没有办法让我检测到这个窗户被打开的时候?

当显示MessageBox窗口时,您将需要一个CBT挂钩来接收通知。 您可以通过调用SetWindowsHookEx()函数并为钩子ID参数指定WH_CBT来安装。 钩子回调函数将为您提供MessageBox窗口的句柄,然后您可以使用它来关闭它。

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

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

明确提到这是DLL的一部分, 真的是不好的行为。 除非绝对必要,否则不要把任何第三方的代码写在你身上。 如果这绝对必要的,那么这是一个红旗:努力消除它是必要的。 你不应该编写和维护代码,以解决他们无法得到明显的东西。