2012-03-13 11 views
0

アプリケーションが、MessageBoxをポップするサードパーティのDLLを読み込みます。 MessageBoxが開いているときにexit(0)を使用できないことがあることに気付きました。MessageBoxによってアプリケーションが終了しないようにします

このような場合には、どうすれば強制的に存在することができますか?

おかげ

+0

環境保護OS? –

+0

申し訳ありませんが、Windows Vista以降 – kambi

答えて

0

あなたはブルートフォースを使用する場合は、TerminateProcess()機能を呼び出すことができます。私はこれがいいアイデアだとは思わないので、開いているメッセージボックスがあるかどうかを検出して近くに送信することができます(たとえば、FindWindow()を使用)。

MSDNをご覧ください。

+0

MessageBoxがモーダルなので、ハングアップしますか?私は、特定のウィンドウのハンドルを見つけた、それはCloseWindow()で閉じることはありません、私はここに何かを逃している? – kambi

+1

彼に[ESC]キーを送信しようとするかもしれません。 –

1

あなたの醜いDLLのように見えます。は、DLL_THREAD_DETACHまたはDLL_PROCESS_DETACHの中からMessageBox(または何でも)を呼び出します。

これは、同じスレッド(すなわち、スレッドの呼び出しexit)に発生した場合、あなたは右前にアプリケーションの終了PostQuitMessageを呼び出すようにしようとします。これにより、メッセージループが中止されます。これが別のスレッドで発生した場合はPostThreadMessageに電話することができます。

また、適切なモジュール(Exe/Dll)インポートテーブルをフックすることで、Win32 API関数の呼び出しをインターセプトするオプションもあります。 J.Richterによって発明されました(私が正しく覚えていれば)。 http://www.player.idv.tw/prog/index.php/APIHook

+0

+1クリーンなソリューション! –

関連する問題