はじめに
本記事では『AutoHotkey』という便利ツールの特に基本的な使い方・スクリプトの書き方のルールをまとめます。
AutoHotkeyとは
AutoHotkey専用のプログラミング言語を用いて、パソコンの操作を便利化できます。
ここでは基本的に、キーボードで独自のショートカットキーを設定するようことを行っていきます。
まだ私もちょっと使い方がわかってきた程度で、備忘録を兼ねているレベルなので、その点ご了承ください。
準備
ダウンロード~初めての実行まで
この範囲は別記事に掲載しているので、まずはその記事を見てahk
ファイルの実行までができるようになってからこの先を読んでください。
スクリプトのはじめに書いておく『おまじない』
これ以降はスクリプトの書き方を説明していきますが、すべてのスクリプトの先頭には次の内容をコピペしておくようオススメします。
#InstallKeybdHook
#UseHook
とりあえず内容はよくわかってなくても大丈夫です。
また、基本的にはこれがなくてもちゃんと動きますが一応。
#InstallKeybdHook
http://did2.blog64.fc2.com/blog-entry-368.html
#InstallKeybdHookを書いておくと、まず、キーの入力履歴が見れるようになって、デバッグ上便利。それと、たしかCtrlキーなどの修飾キーが押しっぱなしになることを防いでくれる(その代わり、ホットキーをすり抜けてしまうことがある)。
#UseHook
http://did2.blog64.fc2.com/blog-entry-368.html
#UseHookが無いとき何が起こるか。ホットキーラベルからSend ^cなどを送るとき、その送りたいキーの組み合わせがホットキーラベルとして定義されているとそちらが優先されてしまい、単純な場合はAHKで無限ループ、複雑な場合だとAHK越しにホットキーをアプリケーションに送るときに制限が発生してしまう
…だそうです。わからなければとりあえず書いておきましょう。
スクリプトの書き方
それではこれ以降で、基本的な実際のスクリプトの書き方をまとめていきます。
キーの入れ替え
単純に『ある特定のキーA』と『ある特定のキーB』を入れ替えたい場合は
ある特定のキーA::ある特定のキーB
という形で書くことができます。
つまり、その両者を半角コロン2つで接続することで、キーの単純な入れ替えを表すことができます。たとえば、
LWin::Control
これはLWin
(左のWindowsキー)をControl
キーに入れ替えるコードです。
先程の左WindowsキーをLWin
と書く部分ですが、どのキーをどのように表記したらよいか、というのは次のキーリストを参照すればいいです。
先程のキーリストを見ていると、多くのキーはControl
のようにわかりやすい名称ですが、『変換キー』など一部は vk1Csc079
のように複雑そうな名称になっていることに気づくと思います。
それぞれのキーはvk
(バーチャルキー)とsc
(スキャンコード)という、2つのコードで表すことができ、それでしか表せないキーがあるようです。
なので、『変換キー』は vk が 1C で sc が 079 なのでそれを併記して vk1Csc079
となっているわけですね。
注意点としては、このかたちでキーを指す場合は、vkもしくはscのどちらか一方で書く必要があるという点です。
たとえば変換キーをコントロールキーに差し替えるのなら、
vk1C::Control ;OK
sc079::Control ;OK
vk1Csc079::Control ;NG
このように上2つだけ許容されますが、昔は一番下の書き方をするようになっていたようなので、いろいろな記事を見ていると併記しているものもよく見かけますが、今はこの書き方はエラーになってしまうのでご注意ください。
これらのキーはちょっと独特な動作をするようで、なかなかうまく変更することができないようです。
たとえば、半角全角キーを他の種類のキーに置き換えようとした場合、半角全角キーはDown(押す)とUp(離す)の信号が逆に入るようになっているようで、置き換え先のキーもそのような挙動をします。
そのため、キーが押しっぱなし状態になるなど、想定外の動作を示しました。
色々試してみたものの、今回は一旦諦めることにしました。
キーの無効化
特定のキーを反応しないようにしてしまいたい場合は次のように書きます。
LWin::Return
先程の置き換えの応用みたいなものです。
Return
は特定のキーではなく、命令終了、みたいな意味の指示を表します。
「置き換えキーなし、終了」
そんな感じになります。
注意としては、このように書くと左Windowsキー単体の押下は無効化されるけど、Windows + E
(エクスプローラーを開く)みたいな組み合わせのショートカットキーは無効化されないという点です。
ショートカットキーまで無効化したい場合は
#E::Return
のようにそれぞれ指定する必要がありそうです(Windowsキー
が#
と表記される。詳しくは後述)。
ショートカットキーの設定
最初に例を示します。
!h::Send,{Left}
!j::Send,{Down}
!k::Send,{Up}
!l;::Send,{Right}
まず、単独キーの入れ替えと同じように::
の左右に置き換え元キー、置き換え先キーを表記するという点は変わりません。
!h
はAlt + hキー
を表しています。
修飾キーと呼ばれる、Shift
、Control
、Alt
、Windows
の4つのキーには、特定のシンボルが割り当てられていて、それらのキーと組み合わせるときは簡単な書き方をすることができるのです。
修飾キー | 修飾シンボル |
---|---|
Shiftキー | + |
Controlキー | ^ |
Altキー | ! |
Windowsキー | # |
なので先程のような書き方をしたのでした。
たとえば、無変換キーとj
キーの組み合わせを表すにはどうしたらよいか、で説明しましょう。
答えはvk1D & h
です。
無変換キーは先に示したキーリストよりvk1D
です。これとh
を&
でつないでやるかたちで書きます(&
の左右には半角スペース)。
&
がもともと持っている意味を考えても理解しやすいですね。
ちなみに、Alt
キーもAlt & h
と書いても認識されます。
あくまで、修飾キーは先ほど示した形で書くと短縮して書けるよ、という理解でいいと思います。
Send,
と表記し、それに加えて対応するキーを{}
で囲った形で書いてやります。それぞれのキーをなんと書いたら良いか、は先ほども示しましたが、以下のリンクからご参照ください。
今回は左矢印キーに割り当てたいのでLeft
を{}
で囲った{Left}
という書き方になります。
この書き方の場合、Shift
を押しながら、設定したAlt + h
のショートカットキーを入れても左方向の範囲選択を行うことはできません。
これがやりたい場合、置き換え先キーの書き方を工夫する必要があります。
結論としては、Send,{Blind}{Left}
と書けばOKです。
このBlind
が『他キーとの同時打鍵を有効にする』ということを表すようです。
ただし、今回例に上げたAlt + h
を矢印キーに当てた場合はこれがうまくいきませんでした(Alt + Shift自体の関係に影響を受けているのかも)。
私の場合は都合が悪くてこのようにしたのですが、多くの人はAlt
ではなく、無変換キー
をここに割り当てたりしているようなので参考まで。
コメントアウトは;
で行います。
つまり;
以降はコメント扱いなので影響しません。
例:!h::Send,{Left} ;Alt + h で左矢印キー
エスケープはバッククオートで表します。
なのでコメントアウトに用いる;
をセミコロンとして表すときは`;
です。
おわりに
AutoHotkeyの基本的な書き方のルールをまとめました。
まだまだ私自身が色々試行錯誤している段階なので、大した情報はまとまっていませんが、同じく初めて触る人に向けてわかるように意識してまとめました。
今後も自分で試していく中でわかってきたことがあれば、追記なり別記事なりでまとめておこうと思います。
分かりやすくて参考になりました。
[…] https://fuchiaz.com/usage-autohotkey/ […]
Windowsに変わってから困っていたので本当に助かりました。
ありがたい記事です。