我的应用程序正在加载第三方DLL,其中一些DLL会打开MessageBox窗口。
我有办法检测何时打开这样的窗户?
答案 0 :(得分:4)
显示MessageBox窗口时,您需要CBT hook才能收到通知。您可以通过调用SetWindowsHookEx()
function并为hook ID参数指定WH_CBT
来安装它。 hook callback function将为您提供MessageBox窗口的句柄,然后您可以使用它来关闭它。
如果您确切知道何时可以创建和显示MessageBox,那么您可以采用比全局钩子更轻松,更简单的方法。这将涉及调用FindWindowEx
function来获取MessageBox窗口的句柄,您也可以使用它来关闭它。
当然,要正确关闭它,您需要知道它是哪种类型的MessageBox(即,它显示哪个标准按钮选项),以便您可以模拟所需按钮的单击。简单地设法让MessageBox从屏幕上消失而不提供有效的答案很可能会在库代码方面产生意外结果。
明确提到这是DLL的 真的 不良行为。除非绝对必要,否则就会抛弃任何第三方,因为这些代码写得很糟糕。如果 绝对必要,那么这就是一个红旗:努力消除它作为必要。你不应该编写和维护大量代码来解决他们无法正确处理大事的问题。