2011-01-18 3 views
0

私はキーボードフックを使用してプッシュツートークボタンを押した場合のVoIPプログラムを行っています。 これはフックをインストールするプロセスからローカルで動作しますが、私の目的はすべてのグローバル入力をチェックすることです。 は、ここで私が使用しているものだ:MSDNや他の情報源によると キーボードフックのみが呼び出しプロセスで動作しています

SetWindowsHookEx(WH_KEYBOARD,hook_hookproc,hookInst,0); 

が、私は痛みを伴うだろう他のすべてのプロセス...に私のフックDLLを注入する必要がある、と私はventrilo/teamspeakなどないことを疑います。それをシステムプロセスに注入することは可能ですか?そして、すべての子プロセス(すべて)がそのようにフックコールを継承しますか?それとも、すべてのプロセスに注入する必要がありますか?

歓声

答えて

3

WH_KEYBOARDのようなグローバルフックは確かに注入することができるDLLが必要です。通常は、他の人にそのことを伝えるためにIPCコードを追加する必要があります。これを行うプロセス境界を越えているので、話すパイプのようなものが必要であることに注意してください。

低レベルのキーボードフック(WH_KEYBOARD_LL)を使用したことがありますか?これは注入可能なDLLを必要とせず、Windowsはフックを呼び出すためにプロセスにコンテキストを切り替えます。ほとんどの場合、特定のキーストロークを検出するのに十分であり、おそらくGetAsyncKeyState()と組み合わせて、修飾キーをチェックします。

RegisterHotKey()で登録されたホットキーも同様に機能します。それはあなたの最初の選択肢であるはずです。マシンに与える影響がはるかに小さいからです。

+0

RegisterHotKeyはすばらしくて、私が必要としているだけで、他のキーボードベースのウィンドウ/プログラムが機能するのを防ぎます。その周りに道がありますか? – KaiserJohaan

+0

「それは」何を意味するのかわかりません。 –

+0

申し訳ありませんが、 "それは"と言っていました:とにかく私はインターネット上での回答を見つけましたが、while(getmsg)ループでWM_HOTKEYメッセージを処理しなければならないと思われます。ヒントをありがとう、今私はフックを使用する必要はありません。 – KaiserJohaan

関連する問題