システムフックからローカルフックへ


cap  2006-10-12 11:55:34  No: 63283  IP: 192.*.*.*

どうも、capといいます。
早速質問です。

自作のEXE上でキーボードのコントロールキーを押しているとき、
ホイールが使えないようにマウスをローカルフックするDLLを作成して
動かしたらうまく制御できたのですが、マウスに付属していたツールを
インストールするとうまく動かないのです。

調べると、ツールが自作のフック制御より先にシステムフックしていたため
だと判りました。

自作のフック制御でツールのシステムフックの制御を無効にする方法は
ないのでしょうか?

環境はWinXP,98で、DLLはVC++6 SP5で作成しました。

どうか、よろしくお願いします。

編集 削除
キー  2006-10-12 15:47:14  No: 63284  IP: 192.*.*.*

的外れな回答かもですが
負けじとこちらもグローバルフックして
目的のメッセージを捕捉し、
それの宛先が渡したくないツール宛であれば
イベントを握りつぶすとか。
うーん。ダメですねw

編集 削除
cap  2006-10-12 16:27:48  No: 63285  IP: 192.*.*.*

キーさん、こんにちは

フックをグローバルへ変更してみましたが、
どのときでも先にツールのフックにメッセージを取られてしまいます。

フックの優先順序ってあるのでしょうか?

編集 削除
キー  2006-10-12 16:39:30  No: 63286  IP: 192.*.*.*

フックチェインの順番がどのように決まるのか
それは変更できるのか、わかりませんが
自作exe内でホイール処理をする所で
CTRLキーの押下状態を見て
もし押されていたら無効、のようなアプローチはどうでしょう?
GetKeyState関数で

編集 削除
cap  2006-10-12 17:11:24  No: 63287  IP: 192.*.*.*

EXE内でも同じでした。
それにEXE本来の処理が重たくて、やっぱりDLLで制御したほうが
いいみたいです。

編集 削除
PATIO  2006-10-13 11:09:35  No: 63288  IP: 192.*.*.*

多分、フックをかけた順でしょうからマウスのツールがPCの起動時に
上がっているのであれば、マウスのツールの方が先にフックチェインに
入ってしまうのではないでしょうか。
それこそ、サービスにでも入れといて先に起動するような手を打つとかしないと
駄目かもしれないですね。
マウスのツールが他のメッセージに振り替えてしまっているようなら
そっちで捕まえないとつかまらないかと思いますが。
マウスのツールがいったい何をやっているのかが書かれていないので
何とも言いかねますね。

編集 削除
cap  2006-10-13 14:49:52  No: 63289  IP: 192.*.*.*

PATIOさん、こんにちは。

>マウスのツールの方が先にフックチェインに入ってしまうので
>はないでしょうか。
そうです。スタートアップにショートカットがあるので先にチェインに
はいってます。
自作のEXEが起動しているときのみ作動して欲しいのでツールより先に
フックさせるのは難しいです。

>マウスのツールが他のメッセージに振り替えてしまっているようなら
自作のフックへはちゃんとWM_MOUSEWHEELのメッセージがきます。

>マウスのツールがいったい何をやっているのかが
ツールの設定でホイールが押されたときにどのように動作させるかだけの
ようです(IEを起動するかとか)のでホイールが回されたときは普段と変
わらない動作です。

編集 削除