2009-05-10 6 views
0

私はいくつかのメッセージタイプが直接ウィンドウプロシージャに送られるのに対し、他のメッセージタイプはスレッドのメッセージキューにポストされていますが、メッセージの送信または投稿の判断方法は見つけられていません。メッセージタイプが送信または送信されるかどうかはどのように判断できますか?

MSDNは半分役立ちます。それはwhat's going onを説明しましたが、それが与える例は多分網羅的ではありません。

送信されたメッセージと投稿されたメッセージの明確なリスト、またはメッセージのタイプを決定する方法はありますか?

答えて

1

一部のメッセージは投稿も送信もされません。 WM_PAINT、WM_TIMERなどがあります。投稿されたメッセージのキューが空の場合、単にGetMessageによって返されます。

私はどのアプリケーションをフックしようとしていますか?そのような質問をする必要がある場合は、私は少し怖いです。開発者がユーザーが報告したクラッシュに対して時間を費やすだけでは、原因が誤ったコードを注入している他のアプリケーションのものであることを知ることができます。慎重に踏んでください!

また、Spy ++(Visual Studioに同梱されているツール)では、任意のライブウィンドウアプリに対して投稿/送信/受信されたメッセージを表示します。

0

各メッセージを文書化MSDNのページが、このための信頼できるソースを考慮する必要があります。

The WM_LBUTTONDOWN message is posted when ...

The WM_SETFOCUS message is sent to a window after ...

など

+0

MSDNはクリアされていますが、http://msdn.microsoft.com/en-us/library/ms646360.aspxのようなページがあります:「ウィンドウがこのメッセージを受け取りました...」 –

+0

@ Steve:SendやPostMessage()を明示的に呼び出すことなく、時にはいつもあなたのプログラムに渡されるメッセージがあることを覚えておいてください。 WM_SYSCOMMANDは、他のメッセージ(クライアント以外のマウス、キーボード)の既定のウィンドウハンドラによって常に内部的に生成されるように見えます。あなたはWH_CALLWNDPROCフックでそれを捕まえることができるかもしれません。なぜなら、これはフードの下で起きているからです(ウィンドウプロシージャへの直接呼び出し、*デフォルトのウィンドウプロシージャから*)。 – Shog9

3

使用InSendMessageまたはInSendMessageExdetermine if you are processing a message that was sent by a callSendMessage機能。

+0

これは、同じスレッドから送信されたメッセージに対しては機能していません。 – Shog9

+0

私はフックプロシージャの観点からこれに近づいているので、コンパイル時にWH_GETMESSAGEまたはWH_CALLWNDPROCフックでメッセージを処理するかどうかを知る必要があります。 –

関連する問題