2012-03-13 133 views
0

我們的應用程序加載第三方DLL,有時會彈出MessageBoxes。 我們注意到,有時我們不能僅在有一個打開的MessageBox時使用exit(0)。MessageBox阻止從應用程序退出

在這種情況下,我們又如何強制存在?

感謝

+0

環境? OS? – 2012-03-13 09:37:18

+0

對不起,Windows Vista及以上版本 – kambi 2012-03-13 09:44:47

回答

0

如果你想用蠻力可以撥打TerminateProcess()功能。我不確定這是一個好主意,你可能想要檢測是否有開放的消息框併發送一個接近它的消息(例如使用FindWindow()

請看MSDN

+0

它是否因爲MessageBox是模態而掛起?我發現特定窗口的句柄,它不會用CloseWindow()關閉,我在這裏錯過了什麼嗎? – kambi 2012-03-13 10:19:02

+1

您可以嘗試向他發送[ESC]按鍵。 – 2012-03-13 10:23:36

1

看起來像你的醜陋的DLL調用MessageBox(或其他)DLL_THREAD_DETACHDLL_PROCESS_DETACH內。

如果這種情況發生在同一個線程(即線程調用exit),你可以嘗試致電PostQuitMessage以前的應用程序退出。這應該會中止任何消息循環。如果這發生在另一個線程中 - 您可以撥打PostThreadMessage

還有一個選項可以通過掛接相應的模塊(Exe/Dll)導入表來攔截對Win32 API函數的調用。由J.Richter發明(如果我沒記錯的話)。 http://www.player.idv.tw/prog/index.php/APIHook

+0

爲清潔解決方案+1! – 2012-03-13 20:15:15