変数と式

目次

変数

変数がどのように機能するかについての一般的な説明と詳細については、変数を参照してください。

変数への値の格納文字列や数値を変数に格納するには、コロンと等号の演算子(:=)の後に数値や引用符で囲まれた文字列、その他の型の式を続けます。事例:

MyNumber := 123
MyString := "This is a literal string."
CopyOfVar := Var

変数を明示的に削除することはできないが、空文字列などの新しい値を代入することで、以前の値を解放することができる:

MyVar := ""

変数に値を割り当てるには、その参照を取り、double-derefを使ったり、関数に渡したりして間接的に行うこともできる。事例:

MouseGetPos &x, &y

値が割り当てられていない変数の値を読むことはエラーとみなされる。IsSetはこの状態を検出するために使われる。

変数の内容の取得変数の内容を文字列に含めるには、連結か 書式を使う。事例:

MsgBox "The value of Var is " . Var . "."
MsgBox "The value in the variable named Var is " Var "."
MsgBox Format("Var has the value {1}.", Var)

部分式も同じように文字列と組み合わせることができる。事例:

MsgBox("The sum of X and Y is " . (X + Y))

変数の比較:さまざまな種類の比較に関する重要な注意事項については、以下の式のセクションをお読みください。

構造化された概要と詳細な説明については、エクスプレッションを参照のこと。

式は、一連の変数、リテラル文字列、リテラル数値に対して、1つまたは複数の演算を実行するために使用されます。

式中のプレーン・ワードは変数名として解釈される。したがって、リテラル文字列は変数と区別するために二重引用符で囲む必要がある。事例:

if (CurrentSetting > 100 or FoundColor != "Blue")
    MsgBox "The setting is too high or the wrong color is present."

上の例では、"Blue"はリテラル文字列なので引用符で囲まれている。シングルクオートマーク(')とダブルクオートマーク(")は、シングルクオートマークで囲まれた文字列がリテラルダブルクオートマークを含むことができ、その逆も可能であることを除いて、同じように機能する。従って、リテラル文字列の中に実際の引用符を含めるには、引用符をエスケープするか、文字列を反対のタイプの引用符で囲む。事例:

MsgBox "She said, `"An apple a day.`""
MsgBox 'She said, "An apple a day."'

空の文字列:式の中で空の文字列を指定するには、空の引用符のペアを使用します。例えば、if (MyVar != "")というステートメントは、MyVarが空白でなければ真となる。

式の結果を格納する:結果を変数に代入するには、コロンと等号の演算子(:=)を使う。事例:

NetPrice := Price * (1 - Discount/100)

ブール値:式がtrueまたはfalseに評価される必要がある場合(IF文など)、空白またはゼロの結果はfalseとみなされ、それ以外の結果はtrueとみなされる。例えば、ItemCountが空白か0の場合のみ、if ItemCount式が偽になる。同様に、if not ItemCount式は逆の結果をもたらす。

NOT/>/=/<などの演算子は、自動的に真か偽の値を生成する:真なら1、偽なら0となる。しかし、AND/OR演算子は常に入力値のいずれかを生成する。例えば以下の式では、A_Indexが5より大きい場合は変数Doneに1が代入され、それ以外の場合はFoundItの値が代入される:

Done := A_Index > 5 or FoundIt

上で示唆したように、変数を空白にするか0を代入するだけで、偽の値を保持することができる。これを利用するために、if Doneという省略記法を使えば、変数Doneが真か偽かをチェックすることができる。

式では、キーワードtruefalseは1と0に解決される。これらの例は、スクリプトをより読みやすくするために使われる:

CaseSensitive := false
ContinueSearch := true

整数と浮動小数点:整数と浮動小数点:式の中で、小数点または科学的記数法を含む数値は浮動小数点とみなされ、そうでない場合は整数となる。加算や乗算など、ほとんどの演算子では、入力のどちらかが浮動小数点数であれば、結果も浮動小数点数になる。

式内でも非式内でも、整数は16進数か10進数のどちらかの形式で書くことができる。16進数はすべて接頭辞0xで始まる。例えば、Sleep 0xFFSleep 255に相当する。浮動小数点数は、小数点の有無にかかわらず、科学表記で書くこともできる(例:1e4-2.1E-4)。

式内では、1280x7F1.0などの引用符で囲まれていないリテラル数値は、スクリプトの実行を開始する前に純粋な数値に変換されるため、数値を文字列に変換すると元のリテラル値とは異なる値が生成される可能性があります。事例:

MsgBox(0x7F)  ; Shows 128
MsgBox(1.00)  ; Shows 1.0

式の演算子

演算子に関する一般的な情報については、「演算子」を参照のこと。

以下に記す場合を除き、空白の値(空文字列)または数値以外の値が算術演算に含まれる場合、ゼロとはみなされない。代わりにTypeErrorが投げられる。Tryを使用しない場合、処理されなかった例外はデフォルトでエラーダイアログを表示します。

式演算子(優先順位の降順)

オペレーター 説明
%Expr%

デリファレンスまたは名前の置換

ExprVarRefに評価されると、%Expr%は対応する変数にアクセスする。例えば、x := &yyへの参照を取り、それをxに代入する。次に、%x% := 1は変数yに代入し、%x%はその値を読み取る。

そうでない場合は、Expr部分式の値が変数やプロパティの名前または部分名として使われる。これによってスクリプトは、Exprを評価することで名前が決まる変数やプロパティ(通常は別の変数)を参照できるようになる。変数は動的に作成できないが、スクリプトのどこかで非動的に宣言または参照されていれば、動的に代入できる。

注:部分式Expr結果は、アクセスする変数またはプロパティの名前または部分名でなければならない。

パーセント記号は、曖昧さのためにExpr内で直接使用することはできないが、括弧内に入れ子にすることはできる。そうでなければ、Exprはどんな式でもよい。

Expr%シーケンスと部分(間にスペースや他の文字を含まない)が隣接している場合、それらは結合されて1つの名前になります。

エラーがスローされるのは、その変数がまだ存在していない場合、あるいは初期化されておらず、その値を読み込もうとしている場合である。or-maybe演算子 (??)は、デフォルト値を提供することで、そのようなケースを避けるために使うことができる。. 事例:%'novar'% ?? 42.

これは歴史的に "double-deref"として知られているが、Exprが変数を含まない場合(1番目のderef)、また、結果の変数が代入のターゲットであり、参照解除されない場合(2番目のderef)、この用語は不正確である。

x.y
x.%z%
会員アクセスyはリテラル名、zは名前として評価される式。オブジェクト構文を参照のこと。
var?

Maybe. 変数のアンセットを許可する。これは、変数をオプショナル・パラメーター、配列要素、オブジェクト・リテラルに渡す場合、または直接代入の右辺に渡す場合にのみ有効である。クエスチョンマークの後には、以下の記号のいずれかを続けなければならない(空白は無視する):)]},:. 変数は、三項演算子AND/ORの右辺で条件付きで渡すことができる。

変数は通常オプションのパラメータだが、どんな変数でも構わない。関数のパラメータではない変数の場合、変数への参照はあるが代入がない場合、ロード時にVarUnset 警告が表示されることがあります。

この演算子は現在、変数に対してのみサポートされている。より一般的なケースで明示的または条件付きでパラメータを省略するには、unsetキーワードを使用します。

こちらもご覧ください:unset(オプション・パラメータ)

++
--

増減の前後。変数に 1 を加算または減算する。演算子は変数名の前でも後でもよい。名前のに現れた場合、その操作は実行され、その結果は次の操作で使用される(この場合、結果は変数参照)。例えば、Var := ++XはXをインクリメントし、その値をVarに代入する。逆に、演算子が変数名のにある場合、結果は演算を実行する前のXの値になる。例えば、Var := X++はXをインクリメントするが、VarはXがインクリメントされる前の値を受け取る。

これらの演算子は、myArray.Length++-myArray[i]のように、オブジェクトのプロパティと組み合わせて使うこともできる。このような場合、部分式の結果は常に数値であり、変数参照ではない。

**

Power. 使用例:Base**Exponent. Both Base and Exponent may contain a decimal point. If Exponent is negative, the result will be formatted as a floating point number even if Base and Exponent are both integers. **は単項マイナスより優先順位が高いので、-2**2-(2**2)のように評価され、-4となる。したがって、リテラルで負の数を累乗するには、(-2)**2のように括弧で囲む。

パワー演算子は右結合である。例えば、x ** y ** zx ** (y ** z)と評価される。

Note: A negative Base combined with a fractional Exponent such as (-2)**0.5 is not supported; attempting it will cause an exception to be thrown. しかし、(-2)**2(-2)**2.0の両方がサポートされている。If both Base and Exponent are 0, the result is undefined and an exception is thrown.

-
!
~
&

単項マイナス (-):オペランドの符号を反転します。

単項プラス (+): +N-(-N)と等価。これは純粋な数値に適用しても何の効果もないが、数値文字列を純粋な数値に変換するために使うことができる。

論理否定 (!):オペランドが空白または0の場合、論理否定を適用した結果は1、つまり「真」を意味する。そうでなければ、結果は0(偽)である。事例:!x or !(y and z). 注:"NOT"は!と同義だが、!の方が優先順位が高い。Varのような連続する単項演算子は、右から左の順番で評価されるため許される。

Bitwise-not (~):オペランドの各ビットを反転する。64ビットの符号付き整数を使用するため、正の入力値は常に負の結果を与え、その逆も同様である。例えば、~0xf0fは-0xf10 (-3856)と評価され、これは2進数で0xfffffffffffff0f0と等価である。符号なし32ビット値が意図されている場合、result& 0xffffffで結果を切り捨てることができる。オペランドが浮動小数点値の場合、TypeErrorがスローされます。

参照 (&):変数への参照を表す値である VarRef を作成します。VarRefを使えば、ターゲット変数に間接的にアクセスできる。例えば、ref := &targetの後に%ref% := 1を続けると、targetに値1が割り当てられる。VarRefは通常関数に渡されるが、配列やプロパティに格納することもできる。こちらもご覧ください:Dereference, ByRef.

A_Clipboardのような組み込み変数への参照は、組み込み関数のOutputVarパラメータに直接渡される場合を除き、現在サポートされていません。

*
/
//

乗算 (*):それ以外の場合は浮動小数点数。

その他の使用法:アスタリスク(*)記号は変種関数呼び出しにも使われる。

真の除算 (/):真の除算は、両方の入力が整数の場合でも浮動小数点数の結果を返す。例えば、3/2は1ではなく1.5、4/2は2ではなく2.0となる。

整数除算 (//):ダブルスラッシュ演算子は、高性能な整数除算を行う。例えば、5//3は1であり、5//-3は-1である。入力のどちらかが浮動小数点形式の場合、TypeErrorが投げられる。モジュロについてはModを参照。

演算子 *= と /=は、変数の値を別の値で乗算または除算する省略記法である。例えば、Var*=2Var:=Var*2と同じ結果になる(ただし、前者の方が性能は良い)。

ゼロによる除算はZeroDivisionErrorをスローする。

+
-

足し算 (+)引き算 (-)。これに関連して、+=演算子や-=演算子は、変数をインクリメントしたりデクリメントしたりする省略記法である。例えば、Var+=2Var:=Var+2と同じ結果になる(ただし、前者の方が性能は良い)。同様に、Var++、Var--、++Var、--Varを使えば、変数を1つ増やしたり減らしたりできる。

その他の使用法:記号の前に値(または値を返す部分式)がない場合、代わりに単項演算子として解釈されます。

<<
>>
>>>

ビットシフト・レフト(<<)。使用例:Value1 << Value2. これは、Value1に「2のValue2乗」を掛けることと同じである。

算術ビットの右シフト(>>)。使用例:Value1 >> Value2. これは、Value1を「2のValue2乗」で除算し、その結果を数直線上で左方向に最も近い整数に四捨五入することと同じである。

論理ビットの右シフト(>>)。使用例:Value1 >>> Value2. 算術ビットシフト右とは異なり、これは数値の符号を保持しない。例えば、-1は符号なし64ビット整数0xffffffffffffと同じビット表現を持つので、-1 >> 1は0x7fffffffffffffとなる。

以下は、3つのオペレーターすべてに適用される:

  • 入力のどちらかが浮動小数点数の場合、TypeErrorが投げられる。
  • Value2が0より小さいか63より大きい場合、例外がスローされる。
&
^
|

ビットワイズ・アンド (&)、ビットワイズ・エクスクルーシブ・オア (^)、ビットワイズ・オア(|)。この3つのうち、&が最も優先順位が高く、|が最も低い。

入力のどちらかが浮動小数点数の場合、TypeErrorが投げられる。

関連:ビットワイズ・ノット (~)

.

連結。ピリオド(ドット)の両側に少なくとも1つのスペースまたはタブを入れ、2つの項目を1つの文字列にまとめる。ピリオドを省略しても同じ結果が得られる x-yのように曖昧な場合や、右側の項目の先頭に ++ や -- がある場合を除く)。ドットが省略された場合、マージされる項目の間には少なくとも1つのスペースまたはタブが必要です。

Var := "The color is " . FoundColor  ; Explicit concat
Var := "The color is " FoundColor    ; Auto-concat

部分式は連結することもできる。事例:Var := "The net price is " . Price * (1 - Discount/100).

ピリオド(またはその他の演算子)で始まる行は、自動的にその上の行に追加される。

各入力の全長は、たとえ2進数のゼロが含まれていても使用される。例えば、Chr(0x2010) Chr(0x0000) Chr(0x4030)は以下のバイト列を生成する(UTF-16-LEエンコーディングによる):0x10, 0x20, 0, 0, 0x30, 0x40. 結果には、長さに含まれないヌル・ターミネーター(2進数のゼロ)が追加される。

その他の使い方:ピリオド(ドット)の右にスペースまたはタブがない場合、リテラル浮動小数点数またはメンバアクセスとして解釈される。例えば、1.1(.5)は数値、A_Args.Has(3)はメソッド呼び出し、A_Args.Lengthはプロパティアクセスである。

~= RegExMatchの省略形。例えば、"abc123" ~= "\d"の結果は4(最初の数字の位置)です。
>   <
>= <=

大きい (>)、小さい (<)大小(>=)より小さい (<=)。入力は数値で比較される。入力のどちらかが数値または数値文字列でない場合、TypeErrorがスローされる。

=
==
!=
!==

大文字小文字を区別しないイコール(=)/ノットイコール(=)、 大文字小文字を区別するイコール(==)/ノットイコール(!==)。==演算子は、=演算子と同じ動作をするが、入力のどちらかが数値でない(あるいは両方が文字列である)場合は、==は常に大文字と小文字を区別し、=は常に大文字と小文字を区別しない。!=!==は、結果が反転することを除けば、!を使わない場合と同じ動作をする。

==!==演算子は、2進数の0を含む文字列を比較するのに使うことができる。~=以外の比較演算子は、最初の2進数の0までしか比較しない。

大文字と小文字を区別しない比較では、ASCII文字のA-Zのみが小文字と同等とみなされる。代わりに、現在のユーザーのロケールのルールに従って比較するには、StrCompareを使用し、CaseSenseパラメータに "Locale"を指定する。

IS
IN
CONTAINS

Value is Class yields 1 (true) if Value is an instance of Class, otherwise 0 (false). Class must be an Object with an own Prototype property, but typically the property is defined implicitly by a class definition. この操作は一般的にHasBase(Value, Class.Prototype)と等価です。

incontainsは将来の使用のために予約されている。

NOT 論理否定。優先順位が低いことを除けば、これは!演算子と同様である。例えば、not (x = 3 or y = 3)!(x = 3 or y = 3)と同じである。
AND
&&

どちらも論理積だ。事例:x > 3 and x < 10.

In an expression where all operands are true, the last operand is returned. Otherwise, the first operand that is false is returned. In other words, the result is true only if all operands are true. Boolean expressions are subject to short-circuit evaluation (from left to right) to improve performance.

In the following example, all operands are true and will be evaluated:

A := 1, B := {}, C := 20, D := true, E := "str"
MsgBox(A && B && C && D && E) ; Shows "str" (E).

In the following example, only the first two operands will be evaluated because B is false. The rest is ignored, i.e. C is not incremented either:

A := 1, B := "", C := 0, D := false, E := "str"
MsgBox(A && B && ++C && D && E) ; Shows "" (B).

ANDまたは&&(あるいはその他の演算子)で始まる行は、自動的にその上の行に追加される。

OR
||

どちらも論理和である。事例:x <= 3 or x >= 10.

In an expression where at least one operand is true, the first operand that is true is returned. Otherwise, the last operand that is false is returned. In other words, if at least one operand is true, the result is true. Boolean expressions are subject to short-circuit evaluation (from left to right) to improve performance.

In the following example, at least one operand is true. All operands up to D will be evaluated. E is ignored and will never be incremented:

A := "", B := false, C := 0, D := "str", E := 20
MsgBox(A || B || C || D || ++E) ; Shows "str" (D).

In the following example, all operands are false and will be evaluated:

A := "", B := false, C := 0
MsgBox(A || B || C) ; Shows "0" (C).

ORまたは||(あるいはその他の演算子)で始まる行は、自動的にその上の行に追加される。

??

あるいは、合体演算子と呼ばれるものかもしれない。左オペランド(変数でなければならない)に値があれば、それが結果となり、右分岐はスキップされる。そうでない場合は、右オペランドが結果になる。言い換えれば、A ?? Bは、条件がIsSet(A)であることを除けば、A || B論理和)のように振る舞う。

これは通常、変数やオプショナル・パラメータにまだ値がないことが分かっている場合に、デフォルト値を提供するために使われる。事例:

MsgBox MyVar ?? "Default value"

変数が初期化されていないことも想定されるので、そのような場合でもエラーは発生しない。IsSet(A) ?A : Bと異なり、変数への他の参照があるが代入がない場合、ロード時にVarUnset 警告が表示されることがあります。

?:

三項演算子。この演算子は、if-else文に代わる省略記法である。左辺の条件を評価し、2つの分岐のどちらが最終的な結果になるかを決定する。たとえば、var := x>y ?2 : 3は、xがyより大きければVarに2を格納し、そうでなければ3を格納する。パフォーマンスを向上させるため、勝利した分岐のみが評価される(短絡評価を参照)。

こちらもご覧ください:maybe (var?), or-maybe (??)

注:行頭で使用する場合、他の文との曖昧さを避けるため、3項条件は通常括弧で囲む。詳しくは表現ステートメントを参照。

:=
+=
-=
*=
/=
//=
.=
|=
&=
^=
>>=
<<=
>>>=

アサイン。変数の内容に演算を行い、結果を同じ変数に戻す。最も単純な代入演算子はコロン等号(:=)で、式の結果を変数に格納する。他の演算子の動作については、この表の関連項目を参照のこと。例えば、Var //= 2は、Varを2で割る整数除算を実行し、結果をVarに戻す。同様に、Var.="abc"は、Var := Var."abc "である。

他のほとんどの演算子とは異なり、代入は右から左に評価される。その結果、Var1 := Var2 := 0のような行は、まずVar2に0を代入し、次にVar2Var1に代入する。

代入が他の演算子の入力として使われる場合、その値は変数そのものとなる。例えば、(Var+=2) > 50という式は、Varの新しく増加した値が50より大きい場合に真となる。また、&(Var := "初期値")のように、代入と参照演算子を組み合わせることも有効である。

代入演算子の優先順位は、構文エラーを回避したり、より直感的な動作を提供したりする場合に、自動的に引き上げられる。事例:not x:=ynot (x:=y)と評価される。また、x==y && z:=1は、x==y && (z:=1)と評価され、xがyと等しくない場合に短絡する。同様に、++Var := X++(Var := X)と評価され、Z>0 ?X:=2 : Y:=2Z>0 ? (X:=2) : (Y:=2)と評価される。

直接代入(:=)とunsetキーワード、またはmaybe (var?) 演算子を組み合わせることで、ターゲット変数を設定解除することができる。事例:Var := unset, Var1 := (Var2?).

代入は、myArray.Length += nmyArray[i] .= tのように、オブジェクトのプロパティを対象とすることもできる。プロパティに代入する場合、部分式の結果は代入される値であり、変数参照ではありません。

() => expr

ファットアロー機能。単純な関数を定義し、FuncまたはClosureオブジェクトを返します。関数のパラメータ・リスト(オプションで関数名を前に付ける)を演算子の左に書く。関数が(返された参照を通じて)呼び出されると、その関数は部分式exprを評価し、結果を返します。

次の2つの例は同等である:

sumfn := Sum(a, b) => a + b
Sum(a, b) {
    return a + b
}
sumfn := Sum

どちらの場合も、関数はスクリプトが起動した時点で無条件に定義されるが、関数参照がsumfnに格納されるのは、代入が評価されたときだけである。

関数名が省略され、パラメータリストが単一のパラメータ名のみで構成されている場合は、括弧を省略することができます。以下の例では、パラメータaを1つ持つ無名関数を定義し、その参照を変数doubleに格納している:

double := a => a * 2

exprの変数参照は、同等の完全な関数定義と同じ方法で解決される。例えば、exprは(入れ子になった関数のように)外側の関数のローカル変数を参照することがあり、その場合、ファット・アロー式が評価されるたびに新しいクロージャが作成され、返されます。宣言は使えないので、この関数は常にassume-localである。

関数の名前を指定することで、クロージャへの参照を自分自身の中に保存することなく(それによって問題のある循環参照を作成する)、再帰的または他のネストされた関数から呼び出すことができます。It can also be helpful for debugging, such as with Func.Name or when displayed on the debugger's call stack.

ファット・アロー構文は、省略記法のプロパティメソッドを定義するためにも使用できます。

,

コンマ(複数ステートメント)。カンマは、1行に複数の部分式を記述するために使用することができる。これは、複数の割り当てや関数コールをグループ化するためによく使われる。事例:x:=1, y+=2, ++index, MyFunc(). このようなステートメントは、左から右の順に実行される。

注:カンマ(またはその他の演算子)で始まる行は、自動的にその上の行に追加される。こちらもご覧ください:コンマのパフォーマンス

カンマは、関数呼び出しや制御フロー文のパラメータを区切るためにも使われる。複数ステートメント式をパラメータ・リストに含めるには、括弧で囲む。例えば、MyFn((x, y))はxとyの両方を評価するが、MyFnの最初の唯一のパラメーターとしてyを渡す。

The comma operator usually performs better than writing separate expressions, especially when assigning one variable to another (e.g. x:=y, a:=b). たとえば、5つまたは10個の単純な式を1つの式にまとめると、35%速くなることがあります。

以下のタイプの部分式は、優先順位や評価の順序を上書きする:

説明
(表現)

括弧で囲まれた任意の部分式。例えば、(3 + 2) * 2とすると、3 + 2が最初に評価される。

複数ステートメント式の場合は、最後のステートメントの結果が返される。例えば、(a := 1, b := 2, c := 3)は3を返す。

Mod()
Round()
Abs()

関数呼び出し。関数名または式と、パラメータ・リストを始める開括弧の間にはスペースを入れてはならない。詳細については、関数呼び出しを参照のこと。

(式)は必ずしも括弧で囲む必要はないが、そうすることで曖昧さをなくすことができる。例えば、(x.y)()はプロパティから関数を取得し、パラメータなしで呼び出すが、x.y()は最初のパラメータとして暗黙的にxを渡す。

(式)()

Fn(Params*)

変数関数呼び出しParamsは、パラメータ値を含むArrayのような列挙可能なオブジェクト(__Enumメソッドを持つオブジェクト)です。

x[y]
[a, b, c]

アイテムのアクセスオブジェクトx__Itemプロパティ (またはデフォルトのプロパティ) を、パラメータy(またはyの代わりに複数のパラメータ) で取得または設定します。これは通常、コレクション内の配列要素またはアイテムに対応し、yはアイテムのインデックスまたはキーである。閉じ括弧の直後に任意の代入演算子を使えば、その項目に値を代入することができる。例えば、x[y] := z

配列リテラル。オープンブラケットに値(または値を返す部分式)が先行しない場合、配列リテラルの開始として解釈される。例えば、[a, b, c]Array(a, b, c)と等価である(a, b, cは変数)。

一般的な使用法については、配列マップを参照のこと。

{a: b, c: d}

オブジェクト・リテラルオブジェクトを作成する。各ペアは、リテラル・プロパティ名aとプロパティ値式bで構成される。例えば、x := {a:b}x := Object(), x.a := bと等価である。ベースはオブジェクト・リテラル内で設定することができるが、他のすべてのプロパティは独自の値プロパティとして設定され、ベース・オブジェクトから継承されたプロパティをオーバーライドする可能性がある。

ダイナミック・プロパティ名を使うには、部分式をパーセント記号で囲む。事例:{%nameVar%:valueVar}.

組み込みの変数

以下の変数はプログラムに組み込まれており、どのスクリプトからも参照できる。

一般的な情報については、組み込み変数を参照してください。

目次

特殊文字

変数 説明
A_Space スペース1文字を含む。
A_Tab タブ文字を1文字含む。

スクリプト・プロパティ

変数 説明
A_Args コマンドラインパラメータの配列を含む。詳細については、スクリプトにコマンドラインパラメータを渡すを参照してください。
A_WorkingDir

スクリプトのカレント作業ディレクトリを取得または設定するために使用する。ルート・ディレクトリでない限り、最後のバックスラッシュは含まれない。例を2つ挙げる:C:\ and C:\My Documents.

SetWorkingDir can also be used to change the working directory.

スクリプトの作業ディレクトリは、スクリプトの起動方法に関係なく、A_ScriptDirがデフォルトとなる。

A_InitialWorkingDir スクリプトの初期作業ディレクトリで、スクリプトの起動方法によって決まる。例えば、スタートメニューのようなショートカットから実行した場合、最初の作業ディレクトリはショートカットのプロパティにある「Start in」フィールドによって決定される。
A_ScriptDir

現在のスクリプトが置かれているディレクトリのフルパス。最後のバックスラッシュは(ルート・ディレクトリでも)省略される。

スクリプトテキストがファイルからではなく標準入力から読み込まれる場合、この変数には初期作業ディレクトリが格納される。

A_ScriptName

Can be used to get or set the default title for MsgBox, InputBox, FileSelect, DirSelect and Gui. スクリプトによって設定されていない場合、デフォルトは現在のスクリプトのファイル名で、パスは省略される。

If the script text is read from stdin rather than from file, this variable contains an asterisk (*).

スクリプトがコンパイルまたは埋め込まれている場合、これは現在の実行可能ファイルの名前です。

A_ScriptFullPath

現在のスクリプトのフルパス、例:C:\Scripts\My Script.ahk

If the script text is read from stdin rather than from file, this variable contains an asterisk (*).

スクリプトがコンパイルまたは埋め込まれている場合、これは現在の実行可能ファイルのフルパスです。

A_ScriptHwnd スクリプトの隠されたメイン・ウィンドウの固有ID(HWND/ハンドル)。
A_LineNumber

スクリプト(またはその#Include files)内で現在実行中の行の番号。この行番号は、ListLinesが表示する行番号と一致する。この例のようなエラー報告に役立つ:MsgBox "Could not write to log file (line number " A_LineNumber ")".

コンパイルされたスクリプトは、すべての#Include filesが1つの大きなスクリプトにマージされるため、行番号が非コンパイルモードで実行したときと異なる場合があります。

A_LineFile

A_LineNumberが属するファイルのフルパスとファイル名。スクリプトが外部ファイルからロードされた場合、その行がスクリプトの#Include Filesのいずれかに属していなければ、これはA_ScriptFullPathと同じです。

スクリプトが.binファイルに基づいてコンパイルされた場合、A_ScriptFullPathと同じ、現在の実行可能ファイルのフルパスと名前です。

スクリプトが埋め込まれている場合、A_LineFileにはアスタリスク(*)の後にリソース名が続く。

A_ThisFunc 現在実行中のユーザー定義関数の名前(ない場合は空白):MyFunction. こちらもご覧ください:名前プロパティ (Func)
A_AhkVersion 1.0.22のように、スクリプトを実行しているAutoHotkeyのバージョンが含まれています。コンパイルされたスクリプトの場合、そのスクリプトをコンパイルするために最初に使用されたバージョンが報告される。バージョン番号の書式設定により、スクリプトはA_AhkVersionがこの例のように>または>=で指定された最小バージョン番号より大きいかどうかをチェックすることができる:if (A_AhkVersion >= "1.0.25.07"). こちらもご覧ください:#Requires および VerCompare
A_AhkPath

非コンパイルまたは埋め込みスクリプトの場合:現在のスクリプトを実際に実行しているEXEファイルのフルパスと名前。事例:C:\Program Files\AutoHotkey\AutoHotkey.exe

.binファイルに基づいてコンパイルされたスクリプトの場合は、レジストリからインストールディレクトリを読み取り、"\AutoHotkey.exe"を追加して値を決定します。AutoHotkeyがインストールされていない場合、値は空白になります。以下の例はこれに相当する:

InstallDir := RegRead("HKLM\SOFTWARE\AutoHotkey", "InstallDir", "")
AhkPath := InstallDir ? InstallDir "\AutoHotkey.exe" : ""

.exeファイルに基づいてコンパイルされたスクリプトの場合、A_AhkPathにはコンパイルされたスクリプトのフルパスが含まれます。これは、外部スクリプトを実行するために/scriptと組み合わせて使うことができる。代わりにインストールされたAutoHotkeyのコピーを見つけるには、上記のようにレジストリを読み取ります。

A_IsCompiled Contains 1 if the script is running as a compiled EXE and 0 (which is considered false) if it is not.

Date and Time

変数 説明
A_YYYY

現在の4桁の年(例:2004年)。A_Yearと同義。

注釈ロケールや言語に適した書式の時刻や日付を取得するには、FormatTime()(時刻と長い日付) あるいはFormatTime(, "LongDate")(長い書式の日付を取得) を使用します。

A_MM 現在の2桁の月(01-12)。A_Monと同義。
A_DD 現在の月の2桁の曜日(01-31)。A_MDayと同義。
A_MMMM 現在のユーザーの言語での現在の月のフルネーム 例:7月
A_MMM 現在のユーザーの言語での現在の月の略称 例:Jul
A_DDDD 現在のユーザーの言語での曜日フルネーム 例:日曜日
A_DDD 現在のユーザーの言語での曜日略号。
A_WDay 現在の1桁の曜日(1~7)。1はどの地域でも日曜日。
A_YDay 現在の曜日(1~366)。例えば、009ではなく9が取り出される。ゼロパディングされた値を取り出すには、以下のようにする:FormatTime(, "YDay0").
A_YWeek ISO 8601に従った現在の年号と週番号(例:200453)。年と週を分けるには、Year :=SubStr(A_YWeek, 1, 4)Week :=SubStr(A_YWeek, -2)を使う。A_YWeekの正確な定義:新年1月1日を含む週が4日以上ある場合は、第1週とします。それ以外は前年の最終週となり、次週は第1週となります。
A_Hour 24時間制の現在の2桁の時(00~23)(例:17は午後5時)。12時間表示とAM/PM表示を同時に取得するには、次のようにします:FormatTime(, "h:mm:ss tt")
A_Min

現在の2桁の分(00-59)。

A_Sec 現在の2桁の秒(00-59)。
A_MSec 現在の3桁のミリ秒(000-999)。先頭のゼロを取り除くには、次の例に従ってください:Milliseconds := A_MSec + 0.
A_Now

YYYYMMDDHH24MISS形式の現在の現地時間。

注:日付と時刻の計算はDateAddDateDiffで実行できる。また、FormatTimeはあなたのロケールや好みに合わせて日付や時刻をフォーマットすることができます。

A_NowUTC YYYYMMDDHH24MISS形式の現在の協定世界時(UTC)。UTCは基本的にグリニッジ標準時(GMT)と同じである。
A_TickCount

システムが起動してから経過したミリ秒数(最大49.7日)。A_TickCountを変数に格納することで、最新のA_TickCountの値からその変数を引くことで、後で経過時間を計測することができる。事例:

StartTime := A_TickCount
Sleep 1000
ElapsedTime := A_TickCount - StartTime
MsgBox ElapsedTime " milliseconds have elapsed."

A_TickCountの10ミリ秒よりも高い精度が必要な場合は、QueryPerformanceCounter()を使用する。

スクリプト設定

変数 説明
A_IsSuspended Contains 1 if the script is suspended, otherwise 0.
A_IsPaused Contains 1 if the thread immediately underneath the current thread is paused, otherwise 0.
A_IsCritical 現在のスレッドクリティカルがオフの場合は0が格納される。Otherwise it contains an integer greater than zero, namely the message-check interval being used by Critical. The current state of Critical can be saved and restored via Old_IsCritical := A_IsCritical followed later by Critical Old_IsCritical.
A_ListLines 行をログに記録するかどうかを取得または設定する。設定可能な値は0(無効)または1(有効)。詳細はListLinesを参照。
A_TitleMatchMode タイトルマッチモードの取得または設定に使用できる。Possible values are 1, 2, 3, and RegEx. 詳細はSetTitleMatchModeを参照。
A_TitleMatchModeSpeed タイトルマッチのスピードを取得または設定するために使用できる。設定可能な値はFastとSlow。詳細はSetTitleMatchModeを参照。
A_DetectHiddenWindows 隠しウィンドウを検出するかどうかを取得または設定する。設定可能な値は0(無効)または1(有効)。詳細はDetectHiddenWindowsを参照。
A_DetectHiddenText ウィンドウ内の隠しテキストを検出するかどうかを取得または設定するために使用できる。設定可能な値は0(無効)または1(有効)。詳細はDetectHiddenTextを参照。
A_FileEncoding 様々な組み込み関数のデフォルト・エンコーディングを取得または設定するために使用できます。詳細はFileEncodingを参照。
A_SendMode 送信モードの取得または設定に使用できる。Possible values are Event, Input, Play, and InputThenPlay. 詳細はSendModeを参照。
A_SendLevel 送信レベル(0~100の整数)を取得または設定する。詳細はSendLevelを参照。
A_StoreCapsLockMode 送信後にCapsLockの状態を復元するかどうかを取得または設定するために使用できます。設定可能な値は0(無効)または1(有効)。詳細はSetStoreCapsLockModeを参照。
A_KeyDelay
A_KeyDuration
キー入力の遅延時間または継続時間をミリ秒単位で取得または設定する。詳細はSetKeyDelayを参照。
A_KeyDelayPlay
A_KeyDurationPlay
SendPlayモードで送信されるキー入力の遅延時間または持続時間をミリ秒単位で取得または設定するために使用できます。詳細はSetKeyDelayを参照。
A_WinDelay ウィンドウ関数の遅延をミリ秒単位で取得または設定する。詳細はSetWinDelayを参照。
A_ControlDelay 制御変更関数の遅延をミリ秒単位で取得または設定する。詳細はSetControlDelayを参照。
A_MouseDelay
A_MouseDelayPlay
マウスディレイをミリ秒単位で取得または設定する。A_MouseDelayは従来のSendEventモード用で、A_MouseDelayPlayはSendPlay用です。詳細はSetMouseDelayを参照。
A_DefaultMouseSpeed デフォルトのマウス速度を取得または設定するために使用します。0 (最も速い) から 100 (最も遅い) までの整数です。詳細はSetDefaultMouseSpeedを参照。
A_CoordModeToolTip
A_CoordModePixel
A_CoordModeMouse
A_CoordModeCaret
A_CoordModeMenu
座標の相対的な領域を取得または設定するために使用できます。Possible values are Screen, Window, and Client. 詳細はCoordModeを参照。
A_RegView レジストリのビューを取得または設定する。設定可能な値は32、64、Default。詳細はSetRegViewを参照。
A_TrayMenu

トレイメニューを変更または表示するために使用できるMenu オブジェクトを返します。

A_AllowMainWindow

スクリプトのメインウィンドウトレイアイコンから開くことを許可するかどうかを取得または設定するために使用できます。設定可能な値は0(禁止)と1(許可)。

スクリプトがコンパイル埋め込みもされていない場合、この変数のデフォルトは1です。そうでない場合、この変数のデフォルトは0ですが、値を代入することでオーバーライドできます。1に設定すると、トレイメニューに「開く」メニュー項目が復活し、メインウィンドウの「表示」メニューにある「最近実行した行」などの項目が有効になり、スクリプトのソースコードやその他の情報を見ることができるようになる。

以下の関数は、スクリプトの実行時にメインウィンドウを表示し、対応するビューオプションを選択することができます:ListLines, ListVars, ListHotkeys, and KeyHistory.

1に設定しても、WinShowでメイン・ウィンドウが表示されたり、ControlGetTextや同様のメソッドで検査されたりするのを防ぐことはできませんが、スクリプトのソース・コードやその他の情報がメイン・ウィンドウ経由で公開されるのを防ぐことができます。

A_IconHidden トレイアイコンを隠すかどうかを取得または設定する。設定可能な値は0(可視)または1(非表示)。詳細は#NoTrayIconを参照。
A_IconTip

トレイアイコンのツールチップテキストを取得または設定するために使用することができます。空白の場合は、スクリプト名が代わりに使用される。

複数行のツールチップを作成するには、各行の間に改行文字(`n)を使用します。最初の127文字だけが表示され、テキストは最初のタブ文字で切り捨てられる。

Windows 10以前では、アンパサンド(&)を含むツールチップテキストを表示するには、各アンパサンドをさらに2つのアンパサンドでエスケープします。例えば、"A && B"と割り当てると、ツールチップに "A & B"と表示される。

A_IconFile TraySetIconによって カスタムトレイアイコンが指定されていない場合は空白で、その場合はアイコンのファイルのフルパスとファイル名になります。
A_IconNumber A_IconFile が空白の場合は空白。そうでない場合は、A_IconFileのアイコンの番号(通常は1)。

User Idle Time

変数 説明
A_TimeIdle

システムが最後にキーボードやマウスなどの入力を受け取ってから経過したミリ秒数。これは、ユーザーが不在かどうかを判断するのに便利である。ユーザーからの物理的な入力や、何等かのプログラムやスクリプト(Send関数やMouseMove関数など)によって生成された人工的な入力は、この値をゼロに戻す。この値は10刻みで増加する傾向があるため、他の値と等しいかどうかはチェックしない。その代わりに、別の値より大きいか小さいかをチェックする。事例:

if A_TimeIdle > 600000
    MsgBox "Last activity was 10 minutes ago"
A_TimeIdlePhysical 上記と似ているが、対応するフック(キーボードまたはマウス)がインストールされているときはいつでも、人工的なキーストロークやマウスクリックを無視する。(これにより、シミュレートされたキーストロークやマウスクリックが、 ユーザーが存在することを誤って示すのを防ぐことができる)。どちらのフックもインストールされていない場合、この変数はA_TimeIdleと等価である。フックが1つしかインストールされていない場合、そのフックの物理入力のタイプのみがA_TimeIdlePhysicalに影響する(他の/インストールされていないフックの入力は、物理的、人工的の両方に影響しない)。
A_TimeIdleKeyboard キーボードフックがインストールされている場合、システムが最後に物理的なキーボード入力を受け取ってから経過したミリ秒数。そうでなければ、この変数はA_TimeIdleと等価である。
A_TimeIdleMouse マウスフックがインストールされている場合、システムが最後に物理的なマウス入力を受け取ってから経過したミリ秒数。そうでなければ、この変数はA_TimeIdleと等価である。

ホットキー、ホットストリング、カスタムメニュー項目

変数 説明
A_ThisHotkey

最近実行したホットキーまたは自動置換でないホットストリング(ない場合は空白)。#zなど。この値は、現在のスレッドが別のホットキーやホットストリングによって中断された場合に変更されるため、一般的には、使用可能な場合はThisHotkeyパラメータを使用する方がよいでしょう。

ホットキーが最初に作成されたとき(Hotkey関数またはスクリプトのダブルコロン構文)、そのキー名と修飾記号の順序がそのホットキーの永続的な名前になり、そのホットキーのすべてのバリエーションで共有されます。

Hotstring関数またはスクリプト内のダブルコロンラベルによってホットストリングが最初に作成されると、そのトリガー文字列とオプション文字のシーケンスが、そのホットストリングの永続的な名前になる。

A_PriorHotkey 前のホットキーを除き、上記と同じ。ない場合は空白になる。
A_PriorKey キー履歴に該当するキーがない場合は空白。AutoHotkeyスクリプトによって生成されたすべての入力は除外されます。この変数を使用するには、キーボードまたはマウスフックがインストールされ、キーヒストリーが有効になっていなければならない。
A_TimeSinceThisHotkey A_ThisHotkeyが押されてから経過したミリ秒数。A_ThisHotkeyが空白のときは常に空白になります。
A_TimeSincePriorHotkey A_PriorHotkeyが押されてから経過したミリ秒数。A_PriorHotkeyが空白のときは常に空白になる。
A_EndChar 直近の非自動置換ホットストリングをトリガーするためにユーザーが押した終了文字。終了文字が必要ない場合(*オプションのため)、この変数は空白になる。
A_MaxHotkeysPerInterval Can be used to get or set the maximum number of hotkeys that can be pressed within the interval defined by A_HotkeyInterval without triggering a warning dialog. 詳細はA_MaxHotkeysPerIntervalを参照。
A_HotkeyInterval Can be used to get or set the length of the interval used by A_MaxHotkeysPerInterval, in milliseconds.
A_HotkeyModifierTimeout Can be used to get or set the timeout affecting the behavior of Send with hotkey modifiers Ctrl, Alt, Win, and Shift. 詳細はA_HotkeyModifierTimeoutを参照。

オペレーティング・システムとユーザー情報

変数 説明
A_ComSpec

Contains the same string as the ComSpec environment variable, which is usually the full path to the command prompt executable (cmd.exe). Run/RunWaitと一緒に使われることが多い。事例:

C:\Windows\system32\cmd.exe
A_Temp

一時ファイルを保存するフォルダのフルパスと名前。これは、以下のいずれかの場所から取得される(順番に):1)環境変数TMP、TEMP、またはUSERPROFILE、2) Windowsディレクトリ。事例:

C:\Users\<UserName>\AppData\Local\Temp
A_OSVersion

オペレーティングシステムのバージョン番号。"major.minor.build"の形式。例えば、Windows 7 SP1は6.1.7601です。

AutoHotkey実行ファイルまたはコンパイル済みスクリプトのプロパティで互換性設定を適用すると、OSが異なるバージョン番号を報告するようになり、A_OSVersionに反映されます。

A_Is64bitOS OSが64ビットの場合は1(true)、32ビットの場合は0(false)を含む。
A_PtrSize ポインタのサイズをバイト数で表す。これは、スクリプトを実行する実行可能ファイル(EXE)のタイプに応じて、4(32ビット)または8(64ビット)のいずれかになります。
A_Language システムのデフォルト言語であり、4桁のコードのいずれかである。
A_ComputerName ネットワーク上で見られるコンピュータの名前。
A_UserName このスクリプトを起動したユーザーのログオン名。
A_WinDir Windowsのディレクトリ。事例:C:\Windows
A_ProgramFiles

Program Filesディレクトリ(例:C:\Program FilesまたはC:\Program Files (x86))。これは通常、ProgramFiles 環境変数と同じである。

64ビット・システムでは(32ビット・システムではなく)、以下が適用される:

  • スクリプトを実行している実行ファイル (EXE) が 32 ビットの場合、A_ProgramFiles は "Program Files (x86)" ディレクトリのパスを返します。
  • 32ビットプロセスでは、ProgramW6432環境変数に64ビットProgram Filesディレクトリのパスが格納される。Windows 7以降では、64ビットプロセスにも設定されている。
  • ProgramFiles(x86)環境変数には、32ビットProgram Filesディレクトリのパスが含まれる。
A_AppData

現在のユーザーのアプリケーション固有データを含むフォルダーのフルパスと名前。事例:

C:\Users\<UserName>\AppData\Roaming
A_AppDataCommon

全ユーザーのアプリケーション固有データを含むフォルダのフルパスと名前。事例:

C:\ProgramData
A_Desktop

現在のユーザーのデスクトップファイルを含むフォルダーのフルパスと名前。事例:

C:\Users\<UserName>\Desktop
A_DesktopCommon

全ユーザーのデスクトップファイルを含むフォルダーのフルパスと名前。事例:

C:\Users\Public\Desktop
A_StartMenu

現在のユーザーのスタートメニューフォルダのフルパスと名前。事例:

C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Start Menu
A_StartMenuCommon

全ユーザーのスタートメニューフォルダのフルパスと名前。事例:

C:\ProgramData\Microsoft\Windows\Start Menu
A_Programs

現在のユーザーのスタートメニューにあるProgramsフォルダのフルパスと名前。事例:

C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
A_ProgramsCommon

全ユーザーのスタートメニューにあるProgramsフォルダのフルパスと名前。事例:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs
A_Startup

現在のユーザーのスタートメニューにあるスタートアップフォルダのフルパスと名前。事例:

C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
A_StartupCommon

全ユーザーのスタートメニューのスタートアップフォルダのフルパスと名前。事例:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
A_MyDocuments

現在のユーザーの "My Documents"フォルダのフルパスと名前。類似の変数の多くとは異なり、フォルダがドライブのルートである場合、最後のバックスラッシュは含まれない(例えば、M:\ではなくM:が含まれる)。事例:

C:\Users\<UserName>\Documents
A_IsAdmin

Contains 1 if the current user has admin rights, otherwise 0.

スクリプト自身を管理者として再起動させるには(または管理者を要求するユーザーにプロンプトを表示するには)、Run *RunAsを使用します。ただし、スクリプトを管理者として実行すると、スクリプトによって起動されるすべてのプログラムも管理者として実行されることに注意してください。代替案についてはFAQを参照。

A_ScreenWidth
A_ScreenHeight

プライマリ・モニターの幅と高さをピクセル単位で指定する(例:1024と768)。

マルチモニターシステムの他のモニターの寸法を調べるには、SysGetを使用する。

デスクトップ全体の幅と高さを知るには(複数のモニターにまたがっていても)、次の例を使う:

VirtualWidth := SysGet(78)
VirtualHeight := SysGet(79)

さらに、SysGet を使用して、タスク バーやその他の登録されたデスクトップ ツールバーが除外されるため、モニタの総面積よりも小さくなる可能性のあるモニタの作業領域を検出します。。

A_ScreenDPI 画面幅に沿った1論理インチあたりのピクセル数。複数のディスプレイモニターがあるシステムでは、この値はすべてのモニターで同じになります。ほとんどのシステムでは96です。システムのテキストサイズ(DPI)の設定によります。GUIの-DPIScaleオプションも参照してください。

Misc.

変数 説明
A_Clipboard OSのクリップボードの内容を取得または設定するために使用できる。詳細はA_Clipboardを参照。
A_Cursor

現在表示されているマウスカーソルの種類。それは以下の言葉のいずれかとなる:AppStarting、Arrow、Cross、Help、IBeam、Icon、No、Size、SizeAll、SizeNESW、SizeNS、SizeNWSE、SizeWE、UpArrow、Wait、Unknown。サイズタイプのカーソルで使われる頭字語はコンパスの方向である。例えば、NESW = NorthEast+SouthWestである。手の形をしたカーソル(ポインティングとグラブ)はアンノウンに分類される。

A_EventInfo

以下のイベントに関する追加情報が含まれています:

注:A_ThisHotkeyなどの変数とは異なり、各スレッドは、A_EventInfoの値を保持します。したがって、スレッドが他のスレッドによって中断されても、再開されたときには、これらの変数に元の値や正しい値が表示される。

A_EventInfoもスクリプトで設定できますが、ポインタで使用可能な範囲(AutoHotkeyのバージョンによって32ビットまたは64ビット)の符号なし整数しか使えません。

A_LastError

これは通常、スクリプトがDllCallRun/RunWait、File/Ini/Reg関数(文書化されている場合)、その他を含む特定の関数を呼び出した後に、OSのGetLastError()関数から生じる結果である。A_LastErrorは0から4294967295までの数値(16進数ではなく常に10進数でフォーマットされる)。ゼロ(0)は成功を意味し、それ以外の数字は通話が失敗したことを意味する。Each number corresponds to a specific error condition. See OSError for how to get the localized error description text, or search www.microsoft.com for "system error codes" to get a list. A_LastError is a per-thread setting; that is, interruptions by other threads cannot change it.

A_LastErrorに値を代入すると、OSのSetLastError()関数も呼び出される。

True
False

Contain 1 and 0. これらは、スクリプトをより読みやすくするために使用することができます。詳細はブール値を参照。

これらは実際にはキーワードであり、変数ではない。

Loop

変数 説明
A_Index 現在のループの繰り返し回数(64ビット整数)を取得または設定するために使用できる。ループ本体が最初に実行されるときに1を含む。2回目には2が入り、以下同様です。内側ループが外側ループで囲まれている場合、内側ループが優先されます。A_Indexはすべてのループの内部で機能するが、ループの外部では0を含む。Loopのようなカウントループの場合、A_Indexを変更すると、実行される反復回数に影響する。
A_LoopFileName, etc. この変数とその他の関連変数は、ファイル・ループ内でのみ有効である。
A_LoopRegName, etc. この変数とその他の関連変数は、レジストリのループ内でのみ有効である。
A_LoopReadLine ファイル読み込みループ参照。
A_LoopField 解析ループを参照。

可変容量とメモリー