2

ここでは、WinXP から user32.dll に MessageBoxTimeout API が登場したことは誰もが知っています。

しかし今は、文書化されていない MessageBoxTimeout を使用することではなく、文書化された MessageBox を使用することです。

したがって、任意の MessageBox の WinXP から - PostMessage (WM_TIMER, 0,0) が PostMessage (WM_CLOSE, 0,0) と同等であるという偶然の一致があります。

インサイダー MS への質問: これはバグですか、それとも機能ですか?

4

1 に答える 1

3

偶然ではありません。のタイムアウト値を渡す のMessageBox呼び出しによって が実装されていることがわかります。これは、デバッガーを使用して識別するのは簡単です。また、ダイアログはダイアログを閉じることでメッセージに応答することもわかりました。それがタイムアウトを実装する方法です。MessageBoxTimeout0xFFFFFFFFMessageBoxTimeoutWM_TIMERMessageBoxTimeout

したがって、ダイアログにWM_TIMERメッセージを投稿すると、実際にはダイアログMessageBoxに投稿されているため、MessageBoxTimeout実際にダイアログを閉じます。

メッセージMessageBoxの受信にどのように応答するかについてはまったく約束しないため、これは確かにバグではありません。WM_TIMER文書化されていないため、機能ではありません。これは、 の現在の実装の興味深い副作用にすぎませんMessageBox

もちろん、これはすべて実装の詳細であり、変更される可能性があります。

于 2013-04-09T15:02:03.503 に答える