WH_MOUSEフックがもうグローバルではないのはなぜですか?

c hook low-level mouse winapi
WH_MOUSEフックがもうグローバルではないのはなぜですか?

私はマウスジェスチャーを監視するDLLにこのグローバルマウスフック設定を持っています。

すべては完璧に動作しますが、低レベルのフックであり、外部の注入可能なDLLに存在する必要はないものであるWH_MOUSE_LLのフックセットを使用します。

WH_MOUSEマウスフックを切り替えると、より適切なものに切り替えると、すべてがバラバラになります。 メインアプリケーション(フックをインストールするもの)の外側をクリックすると、フックが破損します –
::UnhookWindowsHookEx will fail.

私はhttp://www.experts-exchange.com/Programming/Languages/CPP/Q_10095972.html?sfQueryTermInfo=1ムスを見つけただけです[この人は専門家の交換で言って]:

_
「まさか、少なくともWindows XP + SVP2ではWH_MOUSEはグローバルに移行しません。代わりにWH_MOUSE_LLを使用する必要があります。」
_

私はフックを正しくセットアップしました。共有データセクションを使用しているDLLでは、フックプロシージャからのメッセージの投稿と送信は行いません。

なぜこれが変わったのですか? そしてなぜ文書化されていないのですか? 誰もがこれに遭遇しましたか? ありがとうございます。

ところで:私は少し人気のあるhttp://www.tcbmi.com/strokeit/ [StrokeIt]アプリケーションをリバースエンジニアリングしました、そしてそれはWH_GETMESSAGEとWH_MOUSEフックの組み合わせを使います、そして、それでもXP / Vistaで動きます…​

  1  0


ベストアンサー

私はそれを使用するいくつかのアプリがあり、それらはXP、Vista、そしてWindows 7で動作し続けるので、グローバルなWH_MOUSEフックはもはやサポートされないことを私に知らせます。

フックの設定はどうですか? あなたはSetWindowsHookEx(WH_MOUSE、my_mouse_callback、g_hinstance、NULL)を実行できるはずです。

私が考えることができる唯一のことは、コールバック関数があまりにも時間がかかりすぎているということです、その場合、Windowsはフックを外すかもしれません、またはそれは正しくCallNextHookExを呼び出しません。

0


これがコメントとしてうまくいくかどうかはわかりませんが、ここに行きます。MSDNによれば、WH_MOUSEはスレッドレベルまたはグローバルでサポートされていると思います。

あなたがあなた自身を指摘したように、それを使っているたくさんのアプリがあります。

だから私の推測は、グローバルWH_MOUSEのあなたの特定の実装がデバッグされ修正される必要がある問題を抱えているということです。 「フックが壊れた」と言ったとき、正確にはどうなりますか? フックされたアプリはクラッシュしますか? マウスイベントが発生すると予想されるアプリケーションにデバッガを接続し、実際にフックでクラッシュしたものを確認してください。

0


タイトルとURLをコピーしました