5

これは、Windows プログラミングに関する一般的な質問のようなものです。

Window メッセージは「信頼できる」ものですか?

(これらは単なる例です):

  • カーソルが画面に入る前にが起こると確信できますか?WM_MOUSEMOVE

  • デバイスが挿入された場合にメッセージが表示されると確信できますか?WM_DEVICECHANGE

  • ウィンドウがフォーカスを失った場合にメッセージが表示されると確信できますWM_KILLFOCUSか?

または、言い換えると:適切なタイミングで適切なメッセージを受け取ることができると確信できますか? または、明らかに文書化されていない理由でメッセージを見逃す可能性がある場合に備えて、常に防御的にコーディングする必要があります?


例:

  • ファイルシステムフィルタードライバーがファイル操作または変更通知を「見逃さない」ことが保証されています(AFAIK)。

  • 対照的に、ReadDirectoryChangesWが通知を見逃さないという保証はありません。実際、バッファがオーバーフローすると、かなりの数が見落とされる可能性があります。

ノート:

敵対者に対する状況について話しているのではありません (たとえば、誰かがウィンドウ プロシージャをハイジャックしたり、フック/フィルターをインストールしたりするなど) それはほとんど保証を無効にするでしょう。自分のコードを制御できると仮定してSendInputランダムなバッファ オーバーフローが発生した場合や、誰かが

4

1 に答える 1

3

いいえ、特定のメッセージが特定の順序で配信されることを確認することはできません。ここにいくつかの理由があります。

  • メッセージはプログラム的に送信でき、これを使用して のWM_KEYUP後に が続くような「不可能な」シナリオをシミュレートできWM_KEYDOWNます。
  • 別のルーチンがウィンドウをサブクラス化し、メッセージを選択的に傍受し、それらをあなたのウィンドウに送信しない可能性があります。WNDPROC

順序付けが重要なシナリオでは、防御的にコーディングすることをお勧めします

于 2011-05-24T17:46:18.317 に答える