1

マウス ジェスチャを監視する DLL で、このグローバル マウス フックを設定しています。

すべてが完全に機能しますが、WH_MOUSE_LL のフック セットは低レベルのフックであり、外部の注入可能な DLL にある必要はありません。

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

私はこの男が専門家の交換で言っているのを見つけただけです:

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

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

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

ところで: 私は人気のあるStrokeItアプリケーションを少しリバース エンジニアリングしました。このアプリケーションは、WH_GETMESSAGE フックと WH_MOUSE フックの組み合わせを使用し、XP/Vista でも動作します...

4

2 に答える 2

0

グローバルな WH_MOUSE フックがサポートされなくなったことはニュースです。これを使用するアプリがいくつかあり、XP、Vista、および Windows 7 で引き続き動作するためです。

フックの設定はどうしていますか?SetWindowsHookEx(WH_MOUSE, my_mouse_callback, g_hinstance, NULL) を実行できるはずです。

考えられる唯一のことは、コールバック関数に時間がかかりすぎていることです。この場合、Windows がフックを削除するか、CallNextHookEx を適切に呼び出していない可能性があります。

于 2009-07-10T03:13:59.093 に答える
0

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

あなたが指摘したように、それを使用するアプリがたくさんあります。

したがって、グローバル WH_MOUSE の特定の実装には、デバッグして修正する必要がある問題があると思います。「フックが壊れる」と言うと、具体的にはどうなりますか? フックされたアプリはクラッシュしますか? マウス イベントを期待するアプリにデバッガーをアタッチして、フックで実際に何がクラッシュするかを確認できますか?

于 2009-11-28T19:32:15.377 に答える