なにこれ
Windowsでキーバインドをお気軽にいじれるAutoHotkeyの紹介です。3ヶ月使ってみて色々な設定を試した結果、その中でも特に便利だと感じたマウススクロールと修飾キーの組合せについてご紹介します。
AutoHotkeyとは
Windows版で提供されているソフトウェアで、専用のプログラミング言語でキーバインドを定義すれば、任意のキー入力に対してスクリプトを実行できます。既存のキーに別のキーの割当てたり、複雑なショートカットコマンドの割当が可能です。
良い部分
サクッと導入して合わなかったらサクッと廃止できます。
同じようなものでWindowsのChange KeyやMacのKarabiner Elementsがありますが、AutoHotkeyはアプリレイヤーで制御するので、アプリを終了すれば通常操作に戻れて、レジストリをいじったりしなくて良いという手軽さが魅力です。
イマイチな部分
独自言語で設定します。
言語仕様はAutoHotkey公式リファレンスを見て学習が必要です。
少し独特な言語で処理をどこでreturnするか分かりづらい気がします。
リモート接続PCでは効きません。
リモート接続先のPCの操作に対してはAutHotkeyの設定は有効になりません。テレワークでリモートPC操作がメインの方だとイマイチかもしれません。これはChange KeyもKarabiner Elementsも同じですが...
実例紹介:全体像
WindowsだとCtrl
+スクロールは拡大/縮小、Shift
+スクロールは横スクロールになっています。
このノリをWin
,Alt
,Tab
にも拡張する感じでAutoHotkeyで設定します。
右手でマウススクロールしながら、左手でWin
,Alt
,Tab
を押下することで、目的のデスクトップ・アプリ・タブに素早く直感的に移動できます。
Tilesheet B: 0 - 255
Tilesheet C: 256 - 511
Tilesheet D: 512 - 767
Tilesheet E: 768 - 1023
Tilesheet A5: 1536 - 1663
Tilesheet A1: 2048 - 2815
Tilesheet A2: 2816 - 4351
Tilesheet A3: 4352 - 5887
Tilesheet A4: 5888 - 8191
floor-type-autotile-shapes
wall-type-autotile-shapes
waterfall-type-autotile-shapes
実例紹介:ソースコード
まずはソースコード全量を示します。
; 仮想デスクトップ間移動
~LWin & WheelUp::send,^#{Left}
~LWin & WheelDown::send,^#{Right}
; アプリ間移動
~LAlt & WheelDown::AltTab
~LAlt & WheelUp::ShiftAltTab
; Tabの修飾キー化
$Tab::
startTime := A_TickCount
KeyWait, Tab
keyPressDuration := A_TickCount - startTime
If (A_ThisHotkey == "$Tab" and keyPressDuration < 200) {
Send, {Blind}{Tab}
}
Return
; タブ間移動:VSCode
#IfWinActive ahk_exe Code.exe
~Tab & WheelUp::send,^{PgUp}
~Tab & WheelDown::send,^{PgDn}
Return
#IfWinActiveW
; タブ間移動:Chrome
#IfWinActive ahk_exe chrome.exe
~Tab & WheelUp::send,^+{tab}
~Tab & WheelDown::send,^{tab}
Return
#IfWinActiveW
以下で処理の塊ごとに説明します。
仮想デスクトップ間移動
Win
+ スクロール実行時に、Win
+ 左右矢印を発動するように設定します。
Left
,Right
の向きは好みによって変えてください。
~LWin & WheelUp::send,^#{Left}
~LWin & WheelDown::send,^#{Right}
アプリ間移動
同じようにAlt
+ スクロール実行時に、Alt
+Tab
を発動するように設定します。
~LAlt & WheelDown::AltTab
~LAlt & WheelUp::ShiftAltTab
※ちなみにAlt
+Tab
のアプローチは複数選択肢がありますが、Alt
を押し続ける必要があり、1つのキーで代替するのは難しく皆さん実現に苦労されているようです。
タブ移動
Tabは修飾キー化が必要です。
$Tab::
startTime := A_TickCount
; 押し続けている限りリピートせず待機
KeyWait, Tab
keyPressDuration := A_TickCount - startTime
; 押下中に他のホットキーが発動した場合は入力無し い
; 長押しの場合も入力無し
If (A_ThisHotkey == "$Tab" and keyPressDuration < 200) {
Send, {Blind}{Tab}
}
Return
さらにアプリ毎にショートカットキーが異なるのでアプリ別に設定します。
;マウスホイールでタブ移動(VScode)
#IfWinActive ahk_exe Code.exe
~Tab & WheelUp::send,^{PgUp}
~Tab & WheelDown::send,^{PgDn}
Return
#IfWinActiveW
;マウスホイールでタブ移動(クローム)
#IfWinActive ahk_exe chrome.exe
~Tab & WheelUp::send,^+{tab}
~Tab & WheelDown::send,^{tab}
Return
#IfWinActiveW
まとめ
今回紹介したのはスクロールとの組み合わせでしたが、AutoHotkeyは他にもさまざまな設定ができるので便利です。是非使ってみてください🍅
- なにこれ
- AutoHotkeyとは
- 良い部分
- イマイチな部分
- 実例紹介:全体像
- Tilesheet B: 0 - 255
- Tilesheet C: 256 - 511
- Tilesheet D: 512 - 767
- Tilesheet E: 768 - 1023
- Tilesheet A5: 1536 - 1663
- Tilesheet A1: 2048 - 2815
- Tilesheet A2: 2816 - 4351
- Tilesheet A3: 4352 - 5887
- Tilesheet A4: 5888 - 8191
- floor-type-autotile-shapes
- wall-type-autotile-shapes
- waterfall-type-autotile-shapes
- 実例紹介:ソースコード
- 仮想デスクトップ間移動
- アプリ間移動
- タブ移動
- まとめ