- 締切済み
グローバルフック?にならない(SetWindowsHookEx:WH_CALLWNDPROC)
とあるアプリケーションがアクティブウィンドウである場合、 とあるキーを抑制するアプリを作っているのですが、 とあるキーを抑制するのは低レベルキーフック用のDLLを用意して実現しました。 とあるアプリケーションがアクティブウィンドウである場合は、 500msのタイマで監視していたのですが、かっこわるいので ウィンドウイベントをフックしてWM_ACTIVATEあたりを拾って 拾ったときのウィンドウハンドルがとあるアプリケーションのウィンドウか否かで 判断しようかなんて思ったのです。 で、本題です。 SetWindowsHookEx(WH_CALLWNDPROC, &HookProc, g_hInst, NULL); と、実行しているのですが、自分のウィンドウと、IMEとか、 合計3~4種のウィンドウのイベントしか拾えません。 電卓を起動しても電卓のイベントが何も拾えなかったり。 デバッグだからだめなのかと思い、ログファイルに吐かせた結果 こういった状況です。 ロギングしたイベントは特にマスクせずに、コールバックが呼ばれ、 HC_ACTIONであった場合に全て書き出してみました。 そこで質問です。 SetWindowsHookEx(WH_CALLWNDPROC~ では、デスクトップ上の全てのウィンドウのイベントを覗き見できる 訳ではないのでしょうか? それとも、やり方がわるいのでしょうか? 宜しくお願いします。 #SetWindowsHookExの取り扱いについてはMSDN上で確認できる #部分についてはわかっているつもりです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
この辺を参考にしてみては? http://homepage2.nifty.com/c_lang/sdk2/sdk_163.htm
- machongola
- ベストアンサー率60% (434/720)
こんにちは。 g_hInstにフック用に作成したDLLモジュールハンドルを指定していないのでは。 参考になりそうなURL http://oshiete1.goo.ne.jp/qa1343915.html
お礼
あとURL先ですが、 そちらはローカルフックにしようとしていて グローバルフックにしていたというオチですよね。 グローバルフックは低レベルキーフックで実現していまして、 ウィンドイベントのフックも同じくグローバルフックで行いたいのですが、 半端にしかイベントを拾えてないという状況に問題があるのです。 申し訳ないですが、参考にはなりそうも御座いませんでした。
補足
してます。 #SetWindowsHookExの取り扱いについてはMSDN上で確認できる #部分についてはわかっているつもりです。
お礼
参考にはならないようです。 結局回等は得られませんでしたが、 恐らくですが、WH_CALLWNDPROCでは無関係なウィンドウの ウィンドウイベントまで拾えるわけではなさそうですね。