• 締切済み

グローバルフック?にならない(SetWindowsHookEx:WH_CALLWNDPROC)

とあるアプリケーションがアクティブウィンドウである場合、 とあるキーを抑制するアプリを作っているのですが、 とあるキーを抑制するのは低レベルキーフック用のDLLを用意して実現しました。 とあるアプリケーションがアクティブウィンドウである場合は、 500msのタイマで監視していたのですが、かっこわるいので ウィンドウイベントをフックしてWM_ACTIVATEあたりを拾って 拾ったときのウィンドウハンドルがとあるアプリケーションのウィンドウか否かで 判断しようかなんて思ったのです。 で、本題です。 SetWindowsHookEx(WH_CALLWNDPROC, &HookProc, g_hInst, NULL); と、実行しているのですが、自分のウィンドウと、IMEとか、 合計3~4種のウィンドウのイベントしか拾えません。 電卓を起動しても電卓のイベントが何も拾えなかったり。 デバッグだからだめなのかと思い、ログファイルに吐かせた結果 こういった状況です。 ロギングしたイベントは特にマスクせずに、コールバックが呼ばれ、 HC_ACTIONであった場合に全て書き出してみました。 そこで質問です。 SetWindowsHookEx(WH_CALLWNDPROC~ では、デスクトップ上の全てのウィンドウのイベントを覗き見できる 訳ではないのでしょうか? それとも、やり方がわるいのでしょうか? 宜しくお願いします。 #SetWindowsHookExの取り扱いについてはMSDN上で確認できる #部分についてはわかっているつもりです。

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

この辺を参考にしてみては? http://homepage2.nifty.com/c_lang/sdk2/sdk_163.htm

yoshie_orc
質問者

お礼

参考にはならないようです。 結局回等は得られませんでしたが、 恐らくですが、WH_CALLWNDPROCでは無関係なウィンドウの ウィンドウイベントまで拾えるわけではなさそうですね。

回答No.1

 こんにちは。  g_hInstにフック用に作成したDLLモジュールハンドルを指定していないのでは。  参考になりそうなURL  http://oshiete1.goo.ne.jp/qa1343915.html

yoshie_orc
質問者

お礼

あとURL先ですが、 そちらはローカルフックにしようとしていて グローバルフックにしていたというオチですよね。 グローバルフックは低レベルキーフックで実現していまして、 ウィンドイベントのフックも同じくグローバルフックで行いたいのですが、 半端にしかイベントを拾えてないという状況に問題があるのです。 申し訳ないですが、参考にはなりそうも御座いませんでした。

yoshie_orc
質問者

補足

してます。 #SetWindowsHookExの取り扱いについてはMSDN上で確認できる #部分についてはわかっているつもりです。

関連するQ&A