【連載】AutoHotkeyの基本設定・文法

AutoHotkey③

【連載】AutoHotkeyの基本設定・文法

スズキ

まずはここから、AHKの運用に向けた基礎知識です。

前回の記事 の続きです。

AutoHotkey徹底解説の第3回ということで、今回はスクリプトの初期設定と基本文法を取り扱います。

本記事は初心者向けということで、わからないこと、やりたいことが見つかったときのコマンドの調べ方に関しても、本記事の最後に案内します。

今回のゴール

基本的な文法を知る。

スクリプトの初期設定

まずはVSCodeでフォルダを開きます。

これにより、VSCode内でAHKフォルダ以下が操作できるようになりました。

AHKフォルダをVSCodeで開く画像

次に、画像のようにAutoHotkey.ahkを作成します。拡張子を無視したファイル名はAutoHotkey.exeに合わせてあります。

AHKにはAutoHotkey.exeが実行されるとAutoHotkey.ahkが探索・実行される仕様があるためです。

AHKスクリプトを作成する画像

The filename AutoHotkey.ahk depends on the name of the executable used to run the script. autohotkey.com

自由なファイル名.ahkで解説しているところは多いですが、この方法だと*.ahk拡張子の関連付けを利用していることになり、外部への持ち出しの際に不便です。ファイルを役割ごとに細分化する方法は別にあります。(後述)

ここで、画面右下より、文字コードがUTF-8 with BOMとなっていることを確認します
UTF-8その他である場合、その表示部分をクリックし、エンコード付きで保存UTF-8 with BOMとします。

AHKファイルの文字コードを変更する画像

基本的に、この形式以外では日本語が文字化けします。

※ただし、特定の形式ではBOM無しである必要もあるようで、日本語関連で問題が起きた場合はまずこのあたりを疑ってみましょう。

次に、新規作成したAutoHotkey.ahk以下のコードを入力します。
(元々何か入力されていた場合は削除します。)

#Persistent
#SingleInstance, Force
#NoEnv
#UseHook
#InstallKeybdHook
#InstallMouseHook
#HotkeyInterval, 2000
#MaxHotkeysPerInterval, 200
Process, Priority,, Realtime
SendMode, Input
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, 2

Return

下に、簡易的に文法の説明を載せておきました。
詳細が気になる方は公式ドキュメント を適宜参照してください。

今はまだ理解できなくていいし、いつになっても理解する必要は必ずしもありません。

コマンド説明
#Persistentスクリプトを明示的に常駐させる
#SingleInstance, Force同じスクリプトを再実行した際は、確認なくリロードする
#NoEnv変数の処理においてWindows環境変数の探索をしない(処理速度向上のため)
#UseHookRegisterHotkey(WindowsAPI)を介さず、フックを使用してホットキーを定義する(処理速度向上のため)
#InstallKeybdHookキーボードフックを有効化する(デバッグのため)
#InstallMouseHookマウスフックを有効化する(デバッグのため)
#HotkeyInterval, 2000無限ループの検出間隔を設定
#MaxHotkeysPerInterval, 200この回数以上のホットキーが↑の間隔で行われた場合、無限ループとして警告する
Process, Priority,, Realtimeプロセス優先度を最高にする
SendMode, InputSendコマンドのモードをInputにする(処理速度向上のため)
SetWorkingDir %A_ScriptDir%作業フォルダをAutoHotkey.ahkを含むフォルダとする
SetTitleMatchMode, 2WindowTitleは部分一致検索にする
ReturnAuto-executeセクションの終端を明示しておいた。オリジナルのスクリプトはこの下に書いていく

スズキ

ようやく準備が整いました。

基本的な文法

実用的なサンプルコードは次回から紹介していくとして、今回はまずAHKに慣れることを目的とします。

最も確実な方法は公式ドキュメント内のBeginner Tutorial に目を通すことですが、面倒だという方はこのまま下まで読み進めてください。

また、上述AutoHotkey.ahkのReturnより下にスクリプトを書いていきます。

ホットキー

まずは最も基本的な構文から扱います。

最も基本的なホットキー

次のように入力して、エクスプローラからAutoHotkey.exeを実行してください。

#Persistent
#SingleInstance, Force
.
.
.
SetTitleMatchMode, 2

Return

F12::
  Send, F12が入力されました
Return

F12を入力することによってF12が入力されましたという文字列が送信されます。

では、次の場合はどうでしょう。

特別な修飾キーを利用したホットキー

以下を追記し、画面右下のタスクトレイにあるAutoHotkey.ahk(緑アイコン)を右クリックReload This Scriptします。

スクリプトを変更したら、毎回忘れずにリロードします。なお、VSCode拡張機能のAutoHotkey Plusにより、VSCode内ショートカットによりリロードすることも可能です。

^j::
  Send, ^c
  MsgBox, コピーしました
Return

選択箇所がコピーされ、「コピーしました」とメッセージボックスが表示されます。


以上から、ホットキーは::からReturnまでで定義することがわかるかと思います。

ところで^ですが、これはCtrlを表しています。
後述の方法でCtrlと明記しても動作はしますが、不都合なことがあるため、一部の修飾キーは特別な記号が割り振られています

キーシンボル
Ctrl^
Shift+
Alt!
Win#

例えば、Ctrl+Shift+Alt+GでGoogleを開きたい場合、以下のようになります。
(入力して保存したら、忘れずにReloadします。)

^+!G::Run, https://www.google.com/

ここではReturnを省略しましたが、割り当てたいスクリプトが1行の場合、Returnは省略可能です。

Returnを用いる場合は::の直後に改行が必要で、用いない場合は逆に、改行してはいけません。常に改行&Returnでも問題はありません。

複数キーを利用したホットキー

上で紹介した方法はCtrl,Shift,Alt,Winでのみ有効な方法で、その他一般で複数キーを用いる場合は以下の方法で記述します。

Ctrl & F12::Send, {Backspace}

; vk1D→「無変換」
vk1D & F12::Send, {Backspace}

いずれも、Backspaceとして機能していることが確認できます。

ところで、ここにはまだ紹介していない記法があると思います。
&/vk1D/{Backspace}あたりに違和感を覚えておられると思いますので、それぞれ補足していきます。

&について

まず&は見たままですが、複数キーを定義するときに用いるものです。
しかし注意点が2点あります。

  1. 左側に書いたキーが修飾キー扱いとなり、単体動作しなくなる(上の例ならば無変換が使えなくなる)
  2. 3つ以上のキーは使えない

とはいえ、それぞれに対策もあります。

  1. 単体での動作も定義する(vk1D::vk1D)
  2. GetKeyState関数で場合分けする(次回以降で扱います)

どちらもあまりおすすめしたい方法ではないため、&を使用する場合はこのあたりの事情を理解しておきましょう。

vk1Dについて

vk1Dは無変換を表すといいましたが、手っ取り早い方法として、日本語Wikiのキーリスト を参照するのがよいでしょう。

日本語Wikiではvk1Dsc07Bのような書き方がされていますが、現行バージョンのAHKではsc以下は不要なので、vk1DでOKです。

日本語Wikiは2014年頃で更新が止まっているため、古い情報が多々あります。その訳もあって、当サイトでは英語の公式ドキュメントの参照を基本的には推奨しています。

せっかくなので、こちらもホットキーとして登録しておきましょう。

vk1D & F11::Run, http://ahkwiki.net/KeyList

ところでRunコマンドはURL、ファイル、ショートカットなど様々なものを実行できる便利なコマンドです。
似たコマンドにRunWaitがあります。

参照: https://www.autohotkey.com/docs/commands/Run.htm

{Backspace}について

1文字でキーを表せない場合は、{}で囲います。

また、キーに対して特別なアクションを割り当てる場合も同様に囲います。
特別なアクションは、例えば以下のようなものがあります。

アクション説明
{a Down}aを押し下げたままにする
{a 5}aを5回入力する(aaaaaと同じ意味)

ホットストリング

ホットストリングは動作に少し問題を抱えており、知らない方が幸せかもしれないので、ここではあえて紹介しないことにします。

ホットキーを使いこなせるようになった頃には、少し調べて使えるようになっていると思いますから、今知る必要はないでしょう。

変数・関数

ボリューミーなので、こちらは次回から扱います。

おすすめの勉強方法

やる気があって、英語より日本語が得意ならば、下記の流れがよいでしょう。

  1. 本連載に目を通す
  2. 日本語Wiki をすべて読む
  3. 公式ドキュメント を適宜参照する
  4. AHK掲示板 をたまに見る
  5. 英語検索する

順に解説します。


1.本連載に目を通す

AHKはニッチ過ぎて、日本語圏ではあまり良質な情報がありません
「AutoHotkey」「入門」「初心者」などで上位表示される記事でも、正直勧められるサイトはありません。

友人に勧めるにしても、「ここ見ておけばOK」と言えないわけです。

だからこそ、自分が思うAHKを書き、私の記事を見てくださいと言えるようにしたかったのです。

このシリーズは自信を持っておすすめできます。

2.日本語Wikiをすべて読む

この先は、AHKを単なるツールとしてではなく、趣味として楽しめる方のみが進むべき道です。

PCに詳しい人でも読み切るのに数時間を要しますので、AHKを時短用ツールとして活用しようと思っている方は、最低限の文法のみでやりくりすべきです。
(最低限の文法は、こちらの連載で解説していきます。)

日本語Wikiの注意点は、前述の通り、情報が古いという点です。

しかし、根幹が変わったわけではないため、自然な日本語で勉強したい方にはおすすめできます。

もちろん、英語に抵抗がない場合は公式ドキュメントを読み込むべきです。

3.公式ドキュメントを適宜参照する

何か実現したい動作があった場合は、日本語Wikiではなく公式ドキュメントを参照すべきです。

英語が読めない場合でも、機械翻訳で何とかなります。

4.AHK掲示板をたまに見る

AHKの掲示板には、日本人のコアなAHKユーザーが集まっています。会話を見ているだけでも気づきがありますので、たまに巡回するといいでしょう。

5.英語検索する

AHK関連の情報は、日本語ではあまり存在しません。
そのため、何か困ったことがあれば、英語で検索するようにしましょう。

英語だと、想像以上に多くの情報がヒットします。

まとめ

今回は初心者向けということで、超基礎的な文法について少しだけ解説しました。

まだ変数・関数あたりの超重要単元が残っているので、次回はそちらを確認しておきましょう。