portown / capture

a screen capturing tool for old Windows
Boost Software License 1.0
1 stars 0 forks source link

特定のアプリ上でドラッグできない #1

Open portown opened 10 years ago

portown commented 10 years ago

キャプチャモード中、IE 上などでマウスドラッグを行うとそのアプリ自身のマウスイベントになってしまい、 キャプチャできないという問題があります。

portown commented 10 years ago

どうも 32bit アプリからのマウスフックは 64bit アプリ上のマウスイベントをフックできないらしく、 マウスフックを使用している現在の設計を根本的に見直す必要があります。

そこで、一度全画面をキャプチャし、その画像を背景とする全画面ウィンドウを作成します。 キャプチャモード中はそのウィンドウに対してドラッグすることでマウスイベントを取得します。

portown commented 10 years ago

この変更により、以下の仕様変更が予想されます。

これはもはや仕方のないものとして諦めるしかありません。

portown commented 10 years ago

また、以下の問題が考えられます。

解決策として、以下が考えられます。

  1. キーイベントをフックする
  2. キャプチャウィンドウを常に最前面にすることでごまかす

前者は先のマウスイベントのこともあり、実現可能性が不明です。

後者は、キーイベントを放置するため、画面が更新されないままキーのみでキャプチャウィンドウ下のウィンドウを操作することができてしまいます。 が、元からマウスフックのみでキー操作は可能だったため、大きな問題ではないかと思われます。

このため、この問題については後者の解決策で進めていくつもりです。

portown commented 10 years ago

なお、この変更により DLL が不要になるというメリットもあります。 (マウスフックが不要になるので)

portown commented 7 years ago

WH_MOUSEではなくWH_MOUSE_LLを使って Low levelなマウスイベントをフックすれば64bitアプリでもマウスキャプチャ可能な様子。 ただし、その場合はCallNextHookExを呼ばないとマウスが完全に動かなくなってしまうので、 多少のロジック修正が必要。

portown commented 7 years ago

WH_MOUSE_LLをフックすると #13 の問題が顕著になる。