2012-01-31 81 views
0

我的應用程序正在加載第三方DLL,其中一些DLL打開MessageBox窗口。檢測消息框的創建

有沒有辦法讓我檢測何時打開這樣的窗口?

回答

4

當顯示MessageBox窗口時,您需要一個CBT hook來接收通知。您可以通過調用SetWindowsHookEx() function並指定WH_CBT來安裝鉤標識參數。 hook callback function將爲您提供MessageBox窗口的句柄,然後您可以使用它關閉它。

如果您確切知道何時會創建並顯示MessageBox,那麼您可以採用比全局鉤子更輕且更簡單的方法。這將涉及調用FindWindowEx function來獲取MessageBox窗口的句柄,您可以使用它來關閉它。

當然,要正確關閉它,您需要知道它是哪種類型的MessageBox(即它顯示哪個標準按鈕選項),以便您可以模擬所需按鈕的點擊。簡單地設法讓MessageBox從屏幕上消失而不提供有效的答案很可能會在庫代碼方面產生意想不到的結果。

它明確提到這是確實對DLL部分的不良行爲。除非絕對必要,否則不管第三方是否將這些寫得不好的代碼都寫在你身上。如果它絕對必要,那麼這是一個紅旗:努力消除它作爲必要條件。你不應該編寫和維護代碼,以解決他們無法正確處理大問題的問題。