smzht / fakeymacs

Emacs-like key bindings for Keyhac
MIT License
112 stars 49 forks source link

ショートカットキーにマウスのサイドボタン(戻る/進む)機能を割り当てる方法 #29

Closed k9i closed 1 year ago

k9i commented 1 year ago

マウスのサイドボタンに「戻る/進む」が割り当てられているものの、ショートカットキー(Alt-Left/Right)には割り当てられていないアプリがあります。 (具体的にはアプリ版 MS Teams になります)

このアプリのショートカットキーに、マウスサイドボタンのクリック処理を割り当て、キーボードで「戻る/進む」を行えるように設定することは可能でしょうか?

度々済みませんがよろしくお願いいたします。

smzht commented 1 year ago

Keyhac(+pyauto)では、マウスのサイドボタンのコントロールはできないようです。

少し、Windows 10版の MS Teams を使ってみましたが、マウスのサイドボタンに割り当てられている機能は、PageUp、PageDown ではないでしょうか?

そうであれば、Alt+Left/Right に割り当てることは可能なのですが..。(Ctrl+v/Alt+v であれば標準設定で動作します。)

確認ください。よろしくお願いします。

smzht commented 1 year ago

分かりました。私のマウスの設定がPageUp、PageDownになっておりました。 ご希望のこと(戻る/進むをキーに割り当てたい)を理解しましたが、今のところ対応する方法はわかりません。 ご期待に添えず、申し訳ありません。

smzht commented 1 year ago

sendMessage や postMessage を使えないか調べていたところ、以下にヒントがありました。

smzht commented 1 year ago

例えば、F1とF2に「進む」と「戻る」を割り当ててみました。

define_key(keymap_global, "F1", lambda: keymap.getWindow().postMessage(0x020C, 0x10000))
define_key(keymap_global, "F2", lambda: keymap.getWindow().postMessage(0x020C, 0x20000))
smzht commented 1 year ago

0x020C は次の意味となります。

smzht commented 1 year ago

Keyhac の postMessage は次を参照ください。

smzht commented 1 year ago

後は、MS Teams 専用のキーマップを作成し、そのキーマップに A-Left と A-Right のキーバインドを設定すれば良いのではないかと思います。

smzht commented 1 year ago

こんな感じでしょうか。

keymap_msteams = keymap.defineWindowKeymap(exe_name="msedgewebview2.exe")

define_key(keymap_msteams, "A-Left",  lambda: keymap.getWindow().postMessage(0x020C, 0x10000))
define_key(keymap_msteams, "A-Right", lambda: keymap.getWindow().postMessage(0x020C, 0x20000))

これを config_personal.py の [section-base-2] のところに記載して、リロードではどうでしょうか?

k9i commented 1 year ago

ありがとうございます! config_personal.py の [section-base-2] に下記を設定したところ、マウスサイドボタンのクリック同様、(戻る/進む) が機能するようになりました。

keymap_msteams = keymap.defineWindowKeymap(exe_name="Teams.exe")

define_key(keymap_msteams, "A-Left",  lambda: keymap.getWindow().postMessage(0x020C, 0x10000))
define_key(keymap_msteams, "A-Right", lambda: keymap.getWindow().postMessage(0x020C, 0x20000))

自分の環境(Windows10)では、Teams アプリは Keyhac 内部ログには下記のように表示されていました。

Window : exe   : Teams.exe
       : class : Chrome_WidgetWin_1
       : text  : コミュニティ | Microsoft Teams Classic

重ね重ね、どうもありがとうございました。

smzht commented 1 year ago

会社のWindows10にインストールされているTeamsと自宅のWindows11にインストールされているTeamsの挙動が異なっていたのですが、アプリが違うものだったようです。Teams.exeで動いたということであれば、良かったです。

本件も解決ということで、クローズとさせていただきます。