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


cap  2006-10-12 20:55:34  No: 63283

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

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

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

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

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

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


キー  2006-10-13 00:47:14  No: 63284

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


cap  2006-10-13 01:27:48  No: 63285

キーさん、こんにちは

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

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


キー  2006-10-13 01:39:30  No: 63286

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


cap  2006-10-13 02:11:24  No: 63287

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


PATIO  2006-10-13 20:09:35  No: 63288

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


cap  2006-10-13 23:49:52  No: 63289

PATIOさん、こんにちは。

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加