keyhac
keyhac copied to clipboard
マウスのホイールと戻る/進むボタンのキーマップを設定したい
以下のボタンと修飾キーを組み合わせたホットキーを設定したいのですが、良い方法は無いでしょうか?
- ホイール下方向: 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で便宜上割り当てられている仮想キーコードかもしれません。
機能追加してみたところ、以下のことは実現できました。 つまり、マウス操作に対して、キーボード操作を割り当てできます。
- 戻る/進むボタンに対応していないアプリにおいて、戻る/進む相当のキーボードショートカットを割り当て
- 修飾キー+戻る/進む → タブや仮想デスクトップの切り替え等の機能を割り当て
一方、以下のような、マウス操作に別のマウス操作を割り当てることは、実現が難しそうです。 その理由は、 #39 が発生するためです。 回避策として紹介されている、マウスフックしたスレッドと異なるスレッドでSendInputする方法を試しましたが、キー操作から割り当てた操作が実行されるまでの遅延が大きく、実用するのは厳しいと感じました。
- 修飾キー+ホイール上下 → 通常のN倍速でスクロール
- 修飾キー+ホイール上下 → 別の修飾キー+ホイール上下 に変更