どうも、capといいます。
早速質問です。
自作のEXE上でキーボードのコントロールキーを押しているとき、
ホイールが使えないようにマウスをローカルフックするDLLを作成して
動かしたらうまく制御できたのですが、マウスに付属していたツールを
インストールするとうまく動かないのです。
調べると、ツールが自作のフック制御より先にシステムフックしていたため
だと判りました。
自作のフック制御でツールのシステムフックの制御を無効にする方法は
ないのでしょうか?
環境はWinXP,98で、DLLはVC++6 SP5で作成しました。
どうか、よろしくお願いします。
的外れな回答かもですが
負けじとこちらもグローバルフックして
目的のメッセージを捕捉し、
それの宛先が渡したくないツール宛であれば
イベントを握りつぶすとか。
うーん。ダメですねw
キーさん、こんにちは
フックをグローバルへ変更してみましたが、
どのときでも先にツールのフックにメッセージを取られてしまいます。
フックの優先順序ってあるのでしょうか?
フックチェインの順番がどのように決まるのか
それは変更できるのか、わかりませんが
自作exe内でホイール処理をする所で
CTRLキーの押下状態を見て
もし押されていたら無効、のようなアプローチはどうでしょう?
GetKeyState関数で
EXE内でも同じでした。
それにEXE本来の処理が重たくて、やっぱりDLLで制御したほうが
いいみたいです。
多分、フックをかけた順でしょうからマウスのツールがPCの起動時に
上がっているのであれば、マウスのツールの方が先にフックチェインに
入ってしまうのではないでしょうか。
それこそ、サービスにでも入れといて先に起動するような手を打つとかしないと
駄目かもしれないですね。
マウスのツールが他のメッセージに振り替えてしまっているようなら
そっちで捕まえないとつかまらないかと思いますが。
マウスのツールがいったい何をやっているのかが書かれていないので
何とも言いかねますね。
PATIOさん、こんにちは。
>マウスのツールの方が先にフックチェインに入ってしまうので
>はないでしょうか。
そうです。スタートアップにショートカットがあるので先にチェインに
はいってます。
自作のEXEが起動しているときのみ作動して欲しいのでツールより先に
フックさせるのは難しいです。
>マウスのツールが他のメッセージに振り替えてしまっているようなら
自作のフックへはちゃんとWM_MOUSEWHEELのメッセージがきます。
>マウスのツールがいったい何をやっているのかが
ツールの設定でホイールが押されたときにどのように動作させるかだけの
ようです(IEを起動するかとか)のでホイールが回されたときは普段と変
わらない動作です。
ツイート | ![]() |