2009-05-09 18 views
10

別のプロセスでウィンドウに送信されているメッセージを傍受します。これを行う最善の方法は何ですか? WH_GETMESSAGEフックを使用するとメッセージが表示されず、プロセス間でサブクラス化できるかどうかわかりません。どんな助けでも大歓迎です。ウィンドウに送信されるメッセージを傍受するにはどうすればよいですか?

+0

あなたはシステム全体のメッセージフックを設定する必要があります。 [こちらはチュートリアルです](http://www.codeguru.com/cpp/w-p/system/misc/article.php/c5685)。 –

答えて

11

メッセージを傍受したいウィンドウを所有するプロセスに独自のコードを挿入する必要があります。幸いなことに、SetWindowsHookEx()はこれをかなり簡単にしますが、今のところインプロセスフックにしか使用していないのであれば、最初は少し問題があります。

私が被写体に2件の優れた記事を推薦することができます。

  1. ジョセフNewcomberのHooks and DLLs
  2. ロバートKüsterさんのThree Ways to Inject Your Code into Another Process
7

投稿されたメッセージではなく、投稿されたメッセージがWH_GETMESSAGEの場合は表示されません。 WH_CALLWNDPROCが必要です。プロセス間で作業している場合は、DLLにシステム全体のフックが必要です。あなたはSetWindowsHookExをどのように呼び出したかは言及していないので、グローバルではないためにフックが失敗したかどうか、またはあなたが探していたメッセージがのでした。

システム全体のフックで作業していない場合は、私のウェブサイトhereにシステム全体のフックの例があります。それはキーボードフックですが、原則は同じです。

ここで私が意図せずに話していると私を止めてください。あなたの質問はとても短く、私はあなたの専門知識レベルを推測できません。しかしフックをつまんで回るはいくつかの経験を意味します...

+1

申し訳ありませんが、私は詳細を提供する必要があります。メッセージを読むためにWH_CALLWNDPROCを取得しましたが、どうすればそのメッセージをキューから削除できますか?私はいくつかのメッセージがターゲットウィンドウに届かないようにしたい。 –

+0

その後、CallNextHookExにメッセージを渡さないでください。 –

+0

CallNextHookExを呼び出すかどうかは関係ありません。メッセージは常にターゲットウィンドウに到達します。 :( –

関連する問題