【連載】AutoHotkeyの変数・関数・その他コマンドを理解する
AutoHotkey④
スズキ
前回の記事 の続きです。
AutoHotkey徹底解説の第4回ということで、今回は変数や関数などについて解説します。
ただのホットキー設定用ソフトとして使うのか、スクリプト言語として扱えるのかを分ける部分ですので、軽く触れるようにはなっておくと便利です。
今回のゴール
変数や関数の基礎を知る。
はじめに
基本的には、AutoHotkey公式ドキュメントに沿った内容にしています。
具体的なサンプルコードを読み解く方式で学ぶ方が楽しいとは思いますが、超基礎的な部分は先にざっと知っておくと後で役に立つので、今回は完全に座学回としています。
次回以降は、サンプルコードの解説をする形式にしていきますので、今回はざっと通しで見ていただければと思います。
Variables and Expressions
https://www.autohotkey.com/docs/Variables.htm
Functions
https://www.autohotkey.com/docs/Functions.htm
変数
変数の基本
変数は次のように定義・利用します。
num := 123
str := "文字列は囲む"
num_copied := num
メッセージボックスで変数の中身を確認してみます。
MsgBox, % num_copied
; 出力結果
; 123
MsgBox
は、メッセージボックスを表示する機能です。
スクリプトを書く際に、変数の中身が想定しているものであるか確認するなど、デバッグ目的で使用されることが多いです。
第2回でVSCodeの設定をしたので、変数の確認などにはデバッガを利用できます。
デバッガを利用すると開発がスムーズに進みますが、上級者向けなので説明は割愛します。
なお、変数を空にしたい場合は、次のようにして空の文字列を代入します。
var := ""
長い文字列を格納した変数については、必要なくなったタイミングで空にしておくことをおすすめします。
最近では気にする必要もなくなりつつありますが、メモリも有限の資源です。
組み込み変数
AHKに元々用意されている変数です。よく使うものをピックアップしました。
変数 | 説明 |
---|---|
A_WorkingDir | 作業ディレクトリ。SetWorkingDir で設定する(前回参照)。 |
A_ScriptDir | 実行中のスクリプトが配置されているディレクトリのフルパス。 |
A_ThisHotkey | 最後に実行されたホットキー。例: ^z (Ctrl +Z ) |
ClipboardAll | クリップボードの内容を格納している。 |
ErrorLevel | コマンドの実行結果について格納される。If (ErrorLevel==1) などと利用されることが多い。 |
その他多数存在するため、こんなものがあると助かると思うことがあれば、確認してみるとよいでしょう。
Variables and Expressions #BuiltIn
https://www.autohotkey.com/docs/Variables.htm#BuiltIn
式
このセクションでは、変数を扱うための構文を解説します。
式というと、例えば次のような表現です。
If (price<=100 && color=="blue") {
MsgBox, それは"買い"です。
}
条件分岐や繰り返し、その他関数などを活用する場合に、必要となる構文です。
利用可能な演算子は次のとおりです。
演算子 | 説明 |
---|---|
+ - * / | 加減乗除 |
+= -= *= /= | 加減乗除して代入 |
< <= | 未満・以下 |
== | 等しい |
!= | 等しくない |
&& | かつ(論理積) |
|| | または(論理和) |
. | 文字列の結合。前後に半角スペースが必要。 |
式の結果を保存する
次のようにして、変数に計算結果を代入します。
price := 100
net_price := price * (1 - discount/100)
式評価をする(真偽値)
真偽値の扱いは、次のとおりです。
- FALSE: 空白または0
- TRUE: 空白または0以外の全て
例えば、次のような結果になります。
If (TRUE) {
MsgBox, OK1
}
If (1) {
MsgBox, OK2
}
If (3==3) {
MsgBox, OK3
}
If (0) {
; 0はFALSEであるため実行されない
MsgBox, OK4
}
If (2<1) {
; 2<1→0と解釈され、実行されない
MsgBox, OK5
}
これらを盛り込んだサンプルコードを以下に用意しました。
price := 100
price += 50
If (price >= 130 && price < 150) {
discount := 10
} Else {
discount := 20
}
net_price := price * (1 - discount/100)
MsgBox, % "net_price = " . net_price
; 出力結果
; net_price = 120.000000
; (桁数などは必要に応じて`Format()`などで指定します。)
以上が、基本的な変数の扱い方になります。
このノリで関数を利用し、様々な処理を実現していきます。
関数
関数は、スクリプトの肥大化を防いだり、繰り返しの処理をテンプレ化したりする目的で利用されます。
自作の関数を利用する
例えば、2つの数を足して、10倍して2を引く処理を関数化したい場合は次のように設定します。
num1 := 10
num2 := 15
MsgBox, % my_calc(num1, num2)
my_calc(a, b) {
result := (a + b) * 10 - 2
Return result
}
; 出力結果
; 248
my_calc
に10
と15
を渡して、計算結果のresult
をReturn
で返します。
すると、my_calc(num1, num2)
がresult
の値として扱われ、248
が出力されます。
用意された関数を利用する
予め、どのような関数が存在するのかを把握しておく必要があります。
何かをしたいときに、確かそんなものもあった気がする、と思える必要があるためです。
以下、よく使う関数をピックアップしました。
関数 | 説明 |
---|---|
GetKeyState() | 指定したキーの押下状態を取得する。If と組み合わせることで、「xxを押していればxxをする」といった処理が可能になる。AHKを利用する上で避けて通れない超重要関数。 |
WinActive() | 指定したウィンドウがアクティブかを判定する。 |
WinExist() | 指定したウィンドウが存在するかを判定する。 |
StrReplace() | 文字列を置換する。 |
SubStr() | 文字列の一部を抽出する。 |
DllCall() | Windows APIを利用できる。無限の可能性を秘めている。 |
その他の関数やコマンドは以下で確認できます。
commands
https://www.autohotkey.com/docs/commands/
コマンド
関数以外にも便利な文法が存在しますので、最後にこちらを確認しておきます。
コマンド | 説明 |
---|---|
ClipWait | クリップボードが更新されるまで待機する。クリップボードを利用する処理で用いる。 |
GoSub | 指定したラベルまで処理のフォーカスを移動し、Return にあたったら戻ってくる。 |
Goto | GoSub と似ているが、Return にあたったら処理を終了する。 |
Hotkey | 動的にホットキーを定義する。 |
KeyWait | 特定のキーを押すまで、または離すまで処理を中断する。 |
MouseClick | マウスクリックを送信する。 |
MouseGetPos | マウスカーソルの座標を取得する。 |
MsgBox | メッセージボックスを表示する。スクリプトのデバッグによく用いられる。 |
Run | 外部プログラムを実行する。AutoHotkeyで実装できない処理も間接的に実行することができる。無限の可能性を秘めている。 |
SetTimer | 指定した間隔で指定ラベルの処理を実行する。超重要コマンド。 |
Sleep | 指定した時間だけ処理を停止する。 |
SoundBeep | ビープ音を鳴らす。条件分岐などが適切に設定できているか、デバッグ目的で用いられることがある。 |
ToolTip | ツールチップを表示する。 |
WinActivate | 指定したウィンドウをアクティブ化する。 |
WinClose | 指定したウィンドウを閉じる。 |
WinGet | ウィンドウに関する様々な情報を取得する。 |
#If | ホットキーの動作条件を限定する場合などに活用する。頻出コマンド。 |
#Include | 分割したスクリプトファイルを読み込む。 |
その他の関数やコマンドは以下で確認できます。
commands
https://www.autohotkey.com/docs/commands/
まとめ
今回は前回に引き続き、基本的な文法をまとめました。
紹介できていない部分は山のようにありますが、残りの部分はケーススタディ的に知っていくのがよいだろうと思いますので、次回以降は実際のコードを解説する形式で進めていきます。
第5回: 未更新
AHKを活用するために欠かせない機能である、変数や関数の概要を解説します。