keyhac icon indicating copy to clipboard operation
keyhac copied to clipboard

マウスのホイールと戻る/進むボタンのキーマップを設定したい

Open hkcomori opened this issue 1 year ago • 1 comments

以下のボタンと修飾キーを組み合わせたホットキーを設定したいのですが、良い方法は無いでしょうか?

  • ホイール下方向: WheelDown, vk=0x9E
  • ホイール上方向: WheelUp, vk=0x9F
  • 戻る: XButton1, vk=0x05
  • 進む: XButton2, vk=0x06

ホイール上下は修飾キーと組み合わせたsendと入力検出で躓きました。

  • send: 単独ならMouseWheelCommandで可能だが、修飾キーとの組み合わせはできない
  • 入力検出: mousewheelのhookに登録すれば単独検出は可能だが、修飾キーとの同時押しの検出ができませんでした

また、XButton1,2はpyautoでフック対象になっておらず、Keyhacからは状態を知る術が無さそうです。

設定したいホットキーの例

  • 修飾キー+ホイール上下 → 通常のN倍速でスクロール
  • 修飾キー+ホイール上下 → 別の修飾キー+ホイール上下 に変更
  • 戻る/進むボタンに対応していないアプリにおいて、戻る/進む相当のキーボードショートカットを割り当て
  • 修飾キー+戻る/進む → タブや仮想デスクトップの切り替え等の機能を割り当て

仮想キーコードについて

AutoHotkeyで調べたものになります。

仮想キーコードによるとXButton1,2は定義されているようですが、ホイール上下は定義されていないようです。 未割り当て範囲に含まれているので、もしかしたらAutoHotkeyで便宜上割り当てられている仮想キーコードかもしれません。

hkcomori avatar Jul 19 '23 03:07 hkcomori

機能追加してみたところ、以下のことは実現できました。 つまり、マウス操作に対して、キーボード操作を割り当てできます。

  • 戻る/進むボタンに対応していないアプリにおいて、戻る/進む相当のキーボードショートカットを割り当て
  • 修飾キー+戻る/進む → タブや仮想デスクトップの切り替え等の機能を割り当て

一方、以下のような、マウス操作に別のマウス操作を割り当てることは、実現が難しそうです。 その理由は、 #39 が発生するためです。 回避策として紹介されている、マウスフックしたスレッドと異なるスレッドでSendInputする方法を試しましたが、キー操作から割り当てた操作が実行されるまでの遅延が大きく、実用するのは厳しいと感じました。

  • 修飾キー+ホイール上下 → 通常のN倍速でスクロール
  • 修飾キー+ホイール上下 → 別の修飾キー+ホイール上下 に変更

hkcomori avatar Aug 18 '23 14:08 hkcomori