Open portown opened 10 years ago
どうも 32bit アプリからのマウスフックは 64bit アプリ上のマウスイベントをフックできないらしく、 マウスフックを使用している現在の設計を根本的に見直す必要があります。
そこで、一度全画面をキャプチャし、その画像を背景とする全画面ウィンドウを作成します。 キャプチャモード中はそのウィンドウに対してドラッグすることでマウスイベントを取得します。
この変更により、以下の仕様変更が予想されます。
これはもはや仕方のないものとして諦めるしかありません。
また、以下の問題が考えられます。
解決策として、以下が考えられます。
前者は先のマウスイベントのこともあり、実現可能性が不明です。
後者は、キーイベントを放置するため、画面が更新されないままキーのみでキャプチャウィンドウ下のウィンドウを操作することができてしまいます。 が、元からマウスフックのみでキー操作は可能だったため、大きな問題ではないかと思われます。
このため、この問題については後者の解決策で進めていくつもりです。
なお、この変更により DLL が不要になるというメリットもあります。 (マウスフックが不要になるので)
WH_MOUSEではなくWH_MOUSE_LLを使って Low levelなマウスイベントをフックすれば64bitアプリでもマウスキャプチャ可能な様子。 ただし、その場合はCallNextHookExを呼ばないとマウスが完全に動かなくなってしまうので、 多少のロジック修正が必要。
WH_MOUSE_LLをフックすると #13 の問題が顕著になる。
キャプチャモード中、IE 上などでマウスドラッグを行うとそのアプリ自身のマウスイベントになってしまい、 キャプチャできないという問題があります。