변수와 표현식

목차

변수

See Variables for general explanation and details about how variables work.

변수 안에 변수를 저장하기: 문자열이나 숫자를 변수에 저장하려면, legacy and expression. The legacy method uses the equal sign operator (=) to assign unquoted literal strings or variables enclosed in percent signs. 예를 들어:

MyNumber = 123
MyString = 이것은 문자열입니다.
CopyOfVar = %Var%  ; 변수의 내용을 열람하려면 등호(=) 연산자와 함께 퍼센트 사인이 필요합니다.

대조적으로, 표현식 할당은 쌍점-등호 연산자 (:=)를 사용하여, 숫자와 겹따옴표 붙인 문자열 그리고 기타 유형의 표현식을 저장합니다. 다음 예제는 기능적으로 앞의 예제와 동일합니다:

MyNumber := 123
MyString := "이것은 기호 문자열입니다."
CopyOfVar := Var  ; 앞의 예와 다르게, 퍼센트 사인이  := 연산자에 사용되지 않습니다.

더 명료하기 때문에 표현식 할당을 많은 사람들이 선호합니다. 그리고 표현식 할당이 지원하는 표현식 구문이 다른 많은 언어의 표현식 구문과 거의 동일하기 때문입니다.

위에서 눈치 채셨겠지만 변수의 내용을 지우는 데에도 두 가지 방법이 있습니다 (즉, 변수를 비우려면):

MyVar =
MyVar := ""

위에서 빈 겹따옴표 쌍은 := 연산자에만 사용해야 하는데 = 연산자와 사용하면 변수 안에 두 개의 겹따옴표 문자가 기호 그대로 저장되어 버리기 때문입니다.

변수의 내용 열람하기: 값을 저장하는 두 가지 방법과 마찬가지로, 값을 열람하는 방법도 역시 legacy and expression. The legacy method requires that each variable name be enclosed in percent signs to retrieve its contents. 예를 들어:

MsgBox Var 변수의 값은 %Var% 입니다.
CopyOfVar = %Var%

대조적으로, 표현식 열람은 변수 이름 둘레에 퍼센트 기호를 생략하지만, 기호 문자열은 겹따옴표로 둘러야 합니다. 그래서, 다음은 앞 에제의 동등한 표현식입니다:

MsgBox % "Var 변수의 값은 " . Var . " 입니다."  ; 두 개의 문자열을 결합하는데 마침표가 사용되었습니다.
CopyOfVar := Var

In the MsgBox line above, a percent sign and a space is used to change the parameter from legacy to expression mode. This is necessary because the legacy method is used by default by all commands, except where otherwise documented.

변수 비교하기: 다양한 종류의 비교에 관한 중요한 고지 사항, 특히 언제 괄호를 사용해야 하는가에 관한 정보는 아래의 표현식 섹션을 읽어 보십시오.

표현식

See Expressions for a structured overview and further explanation.

표현식은 일련의 변수, 기호 문자열, 그리고/또는 기호 숫자에 하나 이상의 연산을 수행하는 데 사용됩니다.

변수 이름은 표현식에서 퍼센트 사인으로 둘러싸지 않습니다 (의사-배열과 기타 이중 참조는 제외합니다). 결과적으로, 기호 문자열은 겹따옴표로 둘러싸서 변수와 구별해야 합니다. 예를 들어:

if (CurrentSetting > 100 or FoundColor != "Blue")
    MsgBox 설정이 너무 높거나 잘못된 색이 존재합니다.

위의 예제에서, "Blue"는 겹따옴표 안에 있는데 왜냐하면 기호 문자열이기 때문입니다. 실제로 인용-문자를 기호 문자열 안에 포함하려면, 두 개의 겹따옴표를 연속으로 지정합니다. 다음 예와 같이 두 번 나타나야 합니다: "She said, ""An apple a day.""".

주의: There are several types of If Statement which look like expressions but are not.

빈 문자열: 빈 문자열을 표현식에 지정하려면, 빈 겹따옴표 한 쌍을 사용합니다. 예를 들어, if (MyVar != "") 서술문은 MyVar가 비어 있지 않으면 참입니다. 그렇지만, 전통적인-if에서, 한 쌍의 빈 겹따옴표는 기호 그대로 간주합니다. 예를 들어 if MyVar = ""MyVar에 실제로 겹따옴표 쌍이 담겨 있을 경우에만 참입니다. 그래서, 변수가 비어있는지 전통적인-if로 점검하려면, 다음 예와 같이 오른쪽에 아무것도 없이 = 또는 !=를 사용하십시오: if Var =.

관련해서 말씀 드리자면, (x +* 3)와 같이 무효한 식은 빈 문자열을 산출합니다.

표현식의 결과를 저장하기: 결과를 변수에 저장하려면, := 연산자를 사용합니다. 예를 들어:

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

불리언 값: 표현식을 참이나 거짓으로 평가할 필요가 있을 때 (IF-서술문처럼), 빈 또는 0인 결과는 거짓으로 간주되고 다른 모든 결과는 참으로 간주됩니다. 예를 들어, 서술문 if ItemCount는 ItemCount가 비어 있거나 0일 경우에만 거짓입니다. 비슷하게, 표현식 if not ItemCount는 그 반대 결과를 산출합니다.

NOT/AND/OR/>/=/<와 같은 연산자는 자동으로 참 또는 거짓 값을 생산합니다: 참에는 1 그리고 거짓에는 0을 산출합니다. 예를 들어, 다음 표현식에서, 변수 Done은 두 조건중 하나라도 참일 경우 1이 할당됩니다.:

Done := A_Index > 5 or FoundIt

위에서 암시하듯이, 변수는 그냥 비우거나 0을 할당하면 거짓값을 담는데 사용할 수 있습니다. 이를 이용하여, 단축 서술문 if Done을 사용하면 변수 Done이 참인지 거짓인지 점검할 수 있습니다.

단어 truefalse는 내장 변수로서 각각 1과 0을 담고 있습니다. 다음 예제와 같이 스크립트를 더 읽기 쉽게 만들 수 있습니다:

CaseSensitive := false
ContinueSearch := true

정수와 부동 소수점 수: 표현식 안에서, 숫자는 안에 소수점이 있으면 부동 소수점 수로 간주됩니다; 그렇지 않으면 정수로 취급합니다. 대부분의 연산자에 대하여 -- 예를 들어 덧셈과 곱셈 -- 두 입력중 하나라도 부동 소수점 수이면, 그 결과도 역시 부동 소수점 수가 됩니다.

표현식과 비-표현식 안에서 비슷하게 정수는 16진수나 십진수 형식으로 작성할 수 있습니다. 16진수는 모두 접두사 0x로 시작합니다. 예를 들어, Sleep 0xFFSleep 255와 동등합니다. [v1.0.46.11+]: 과학적 표기법으로 작성된 부동 소수점 수를 인지합니다; 그러나 안에 소수점이 포함되어 있을 경우에만 인지합니다 (예, 1.0e4 그리고 -2.1E-4).

강제로 표현식으로 만들기: 표현식은 매개변수에 사용할 수 있습니다. 직접적으로 지원하지 않더라도 (OutputVar 매개변수 제외) 표현식 앞에 퍼센트 사인과 스페이스 또는 퍼센트 사인과 탭을 두면 됩니다. [v1.1.21+]에서, 전통적인 IF 명령어를 제외하고 모든 명령어의 InputVar 매개변수에 이 접두사를 사용할 수 있습니다 (대신에 If (표현식)을 사용하십시오). 이 테크닉은 종종 배열에 접근하는 데 사용됩니다. 예를 들어:

FileAppend, % MyArray[i], My File.txt
FileAppend, % MyPseudoArray%i%, My File.txt
MsgBox % "The variable MyVar contains " . MyVar . "."
Loop % Iterations + 1
WinSet, Transparent, % X + 100
Control, Choose, % CurrentSelection - 1

표현식 안의 연산자

See Operators for general information about operators.

Except where noted below, any blank value (empty string) or non-numeric value involved in a math operation is not assumed to be zero. 대신에, 에러로 취급합니다. 그 때문에 표현식의 일부가 빈 문자열로 평가됩니다. 예를 들어, 변수 X가 비어 있으면, 표현식 X+1은 1이 아니라 빈 값을 산출합니다.

For historical reasons, quoted numeric strings such as "123" are always considered non-numeric when used directly in an expression (but not when stored in a variable or returned by a function). This non-numeric attribute is propagated by concatenation, so expressions like "0x" n also produce a non-numeric value (even when n contains valid hexadecimal digits). This problem can be avoided by assigning the value to a variable or passing it through a function like Round(). Scripts should avoid using quote marks around literal numbers, as the behavior may change in a future version.

표현식 연산자 (우선순위가 높은 순서부터 나열합니다)

연산자 설명
%Var%

변수가 표현식 안에서 퍼센트 사인에 둘러 싸여 있으면 (예, %Var%), 그 변수에 들어 있는 것은 어떤 것이든 또다른 변수의 이름이나 부분 이름으로 간주합니다 (그런 변수가 없다면, %Var%는 빈 문자열로 결정됩니다). 이런 일은 다음 예와 같이 의사-배열을 참조하는 데 자주 사용됩니다:

Var := MyArray%A_Index% + 100

하위 호환을 위해, "표현식일 수 있음"으로 문서화되어 있는 명령어 매개변수는 퍼센트 기호 안에 이름만 있는 변수에서 마치 퍼센트 사인이 없는 것처럼 취급합니다 (예, %Var%, 그러나 Array%i%는 아님). 괄호 안에 그 참조를 둘러싸면 이런 일을 피할 수 있습니다; 예, Sleep (%Var%).

[AHK_L 52+]: 보통 변수 외에도, %Var%는 환경 변수, 클립보드, 또는 예약/읽기-전용 변수로 결정될 수 있습니다. revision 52이전에서, 이런 경우 %Var%는 빈 문자열을 산출했었습니다.

x.y [AHK_L 31+]: 객체 접근. x 객체에 메쏘드를 호출하거나 값을 설정하고 얻습니다. 여기에서 y는 기호 그대로의 값입니다. 객체 구문을 참조하십시오.
new [v1.1.00+]: 또다른 객체로부터 상속받아 새 객체를 생성합니다. 예를 들어, x := new y는 종종 x := {base: y}와 동등합니다. new는 다음에 GlobalClass.NestedClass의 형태로 변수나 간단한 클래스 이름이 따라와야 합니다. 그리고 선택적으로 x := new y(z)에서와 같이 매개변수가 따라 옵니다 (여기에서 y는 사용가능하지만, 함수 이름은 아닙니다). 자세한 것은 맞춤 객체를 참조하십시오.
++
--
전위/후위 증감. 변수에서 1을 더하거나 뺍니다 (그러나 1.0.46 이전 버전이면, 이것은 오직 그 자체로 한 줄에 사용해야 합니다; 다른 연산자가 없어야 합니다). 연산자는 변수 이름의 앞이나 뒤에 나타납니다. 이름 에 나타나면, 연산이 즉시 수행되고 그 결과가 다음 연산에 사용됩니다. 예를 들어, Var := ++X는 X를 즉시 증가시킨 다음 그의 값을 Var에 할당합니다. 반대로, 증감 연산자가 변수 이름 뒤에 있으면 그 변수가 다음 연산에 사용되고 난 후에 연산이 수행됩니다. 예를 들어, Var := X++는 현재 X값을 Var에 할당하고 난 후에 X를 증가시킵니다. 하위 호환의 문제 때문에, ++ 과 -- 증감 연산자는 빈 변수를 0으로 취급합니다. 그러나 한 줄에 홀로 있을 때만 그렇습니다; 예를 들어, y:=1, ++x 그리고 MsgBox % ++x는 둘 다 x 가 비어 있을 때 빈 결과를 산출합니다.
**

Power. 밑수와 지수 모두 십진 소수점을 담을 수 있습니다. 지수가 음수이면, 그 결과는 부동 소수점 수로 포맷됩니다. 밑수와 지수 둘 모두 정수일지라도 그렇습니다. **는 우선 순위가 단항 마이너스 보다 높기 때문에, -2**2-(2**2)로 평가되고 그래서 -4를 산출합니다. 그러므로, 기호 음수를 제곱하려면, (-2)**2와 같이 괄호로 둘러싸십시오.

주의: (-2)**0.5와 같이 음의 밑수가 분수 지수와 결합하는 것은 지원하지 않습니다; 빈 문자열이 산출될 것입니다. 그러나 (-2)**2(-2)**2.0는 둘 모두 지원합니다.

주의: Unlike its mathematical counterpart, ** is left-associative in AutoHotkey v1. For example, x ** y ** z is evaluated as (x ** y) ** z.

-
!
~
& *

Unary minus (-): 뺄셈 연산자와 같은 심볼을 사용하지만, 단항 마이너스는 오직 하나의 항목에만 적용됩니다. 또는 다음 두 예제에서 보여주는 바와 같이 부분-표현식에만 적용됩니다: -(3 / -x). 관련하여 덧붙인다면, 표현식 안에서 단항 플러스 사인(+)은 무시됩니다.

Logical-not (!): 피연산자가 비어 있거나 0이면, 논리적-not을 적용한 결과는 1입니다. 참("true")이라는 뜻입니다. 그렇지 않으면 그 결과는 0입니다 (false). 예를 들어: !x or !(y and z). 주의: 단어 NOT은 !와 동의어입니다. 단 !가 더 우선 순위가 높습니다. [v1.0.46+]: !!Var와 같이 연속적인 단항 연산자가 허용됩니다. 왜냐하면 오른쪽에서 왼쪽 순서로 평가되기 때문입니다.

Bitwise-not (~): 피연산자의 각 비트를 뒤집습니다. 피연산자가 부동소수점 값이면, 먼저 정수로 자르고 나서 계산합니다. 피연산자가 0부터 4294967295 (0xffffffff) 사이이면, 부호 없는 32-비트 값으로 취급됩니다. 그렇지 않으면 부호 있는 64-비트 값으로 취급됩니다. 예를 들어, ~0xf0f는 0xfffff0f0 (4294963440)으로 평가됩니다.

Address (&): &MyVar는 메모리에서 MyVar의 내용이 있는 주소를 열람합니다. 이 주소는 전형적으로 DllCall 구조에 사용됩니다. &MyVar는 또 그 변수에 대한 이진 숫자를 캐싱하는 것을 불능으로 만듭니다. 수학 계산이나 숫치 비교에 사용되기라도 하면 수행성능이 떨어질 수 있기 때문입니다. 캐싱은 그의 주소가 바뀔 때마다 (예, VarSetCapacity()를 통하여) 재활성화됩니다.

Dereference (*): *ExpressionExpression이 숫치형 메모리 주소로 결정될 것이라고 간주합니다; 그 주소의 바이트를 0부터 255 사이의 숫자로 열람합니다 (주소가 0이면 언제나 0이 열람됩니다; 그러나 다른 무효한 주소는 모두 스크립트가 충돌할 수 있기 때문에 피해야 합니다). 그렇지만, NumGet()은 일반적으로 이진 숫자를 열람할 때 훨씬 더 수행성능이 좋습니다.

*
/
//

곱셈 (*): 입력이 모두 정수이면 그 결과도 정수입니다; 그렇지 않으면, 부동 소수점 수입니다.

실수 나눗셈 (/): EnvDiv와 다르게, 실수 나눗셈(true division)은 두 입력이 모두 정수라도 부동 소수점 수를 결과로 산출합니다. 예를 들어, 3/2는 1이 아니라 1.5를 산출하고, 4/2는 2가 아니라 2.0을 산출합니다.

Floor divide (//): 이중-정사선 연산자는 두 입력이 모두 정수이면 성능이 높은 정수 나눗셈을 수행합니다. 예를 들어, 5//3는 1이고 5//-3은 -1입니다. 입력 중 하나가 부동 소수점 형식이면, 부동 소수점 나눗셈이 수행되고 그 결과는 왼쪽으로 가장 가까운 정수로 잘라냅니다. 예를 들면, 5//3.0은 1.0이고 5.0//-3은 -2.0입니다. 이 부동 소수점 나누셈이 결과가 정수임에도 불구하고, 부동 소수점 형식으로 저장됩니다. 그래서 그 값을 사용하는 것들은 모두 부동 소수점 수라고 인식합니다. 나머지 연산자(modulo)에 관한 것은 mod()를 참조합니다.

*= 연산자와 /= 연산자는 간략하게 한 변수 안의 값을 다른 값으로 곱하거나 나누는 방법입니다. 예를 들어, Var*=2Var:=Var*2와 같은 결과를 산출합니다 (그렇지만 전자가 수행성능이 더 좋습니다).

0으로 나누면 빈 결과 (빈 문자열)이 산출됩니다.

+
-

더하고(+) 뺍니다 (-). 관련해서 말씀 드리자면, += 그리고 -= 연산자는 간략하게 변수를 증가시키거나 감소시키는 방법입니다. 예를 들어, Var+=2Var:=Var+2와 같은 결과를 생산합니다 (그렇지만 전자가 더 수행성능이 좋습니다). 비슷하게, Var++, Var--, ++Var, 또는 --Var을 사용하면 변수를 1씩 증가시키거나 감소시킬 수 있습니다.

<<
>>
>>>

Bit shift left (<<). 예를 들어: Value1 << Value2. This is equivalent to multiplying Value1 by "2 to the Value2th power".

Arithmetic bit shift right (>>). 예를 들어: Value1 >> Value2. This is equivalent to dividing Value1 by "2 to the Value2th power" and rounding the result to the nearest integer leftward on the number line; for example, -3>>1 is -2.

Logical bit shift right (>>>) [v1.1.35+]. 예를 들어: Value1 >>> Value2. Unlike arithmetic bit shift right, this does not preserve the sign of the number. For example, -1 has the same bit representation as the unsigned 64-bit integer 0xffffffffffffffff, therefore -1 >>> 1 is 0x7fffffffffffffff.

For all three operators, any floating point input is truncated to an integer prior to the calculation. The results are undefined if Value2 is less than 0 or greater than 63.

&
^
|
비트별-and (&), 비트별-배타적-or (^), 그리고 비트별-or (|). 계통도에서, &가 우선 순위가 제일 높고 |가 제일 낮습니다. 부동 소수점 수 입력은 먼저 정수로 잘라내고 나서 계산됩니다.
.

결합. 점(dot) 연산자는 두 개의 항목을 하나의 문자열로 결합하는 데 사용됩니다 (점의 양쪽에 적어도 하나의 공간이 있어야 합니다). 점을 생략해도 같은 결과를 얻을 수 있습니다 (단 x -y와 같이 애매하거나, 오른쪽에 있는 항목 앞에 ++ 또는 --이 있는 경우는 제외합니다.). 점이 생략되면, 병합될 항목 사이에 적어도 공간 하나가 있어야 합니다.
예제 (표현식 방법): Var := "The color is " . FoundColor
예제 (전통적 방법): Var = The color is %FoundColor%

하위-표현식도 역시 결합할 수 있습니다. 예를 들어: Var := "The net price is " . Price * (1 - Discount/100).

점으로 (또는 기타 다른 연산자로) 시작하는 줄은 자동으로 윗 줄에 추가됩니다.

~= [AHK_L 31+]: RegExMatch()에 대한 약자입니다. 예를 들어, "abc123" ~= "\d"는 ErrorLevel을 0으로 설정하고 (첫 번째 숫자의 위치) 4를 산출합니다. [v1.1.03] 이전 버전에서, 이 연산자는 등호 (=) 연산자와 우선순위가 같았고 완벽하게 문서화되어 있지 않았습니다.
>   <
>= <=

초과 (>), 미만 (<), 이상 (>=), 그리고 이하 (<=). If both inputs are numbers or numeric strings, they are compared numerically; otherwise they are compared alphabetically. 비교는 대소문자를 구분하지 않습니다. StringCaseSense가 켜져 있으면 대소문자를 구분해서 비교합니다. 다음 참조: Sort

주의: In AutoHotkey v1, a quoted string (or the result of concatenating with a quoted string) is never considered numeric when used directly in an expression.

=
==
<> !=
!==

Case-insensitive equal (=), case-sensitive equal (==), and not-equal (<> or !=). If both inputs are numbers or numeric strings, they are compared numerically; otherwise they are compared alphabetically. 연산자 !=<>는 기능면에서 동일합니다. == 연산자는 =와 동일하게 행위합니다. 입력 중 하나라도 숫자가 아닌 경우는 제외하는데, 그 경우 ==는 언제나 대소문자를 구분하고 =는 언제나 대소문자를 구분하지 않습니다 (대소문자의 구분은 StringCaseSense에 달려 있습니다). 대조적으로, <>!=StringCaseSense에 순종합니다.

Case-sensitive not-equal (!==) [v1.1.35+]. Behaves identically to ==, except that the result is inverted.

주의: In AutoHotkey v1, a quoted string (or the result of concatenating with a quoted string) is never considered numeric when used directly in an expression.

비추천: 이 <> 연산자는 새 스크립트에 사용을 추천하지 않습니다. 대신 != 연산자을 사용하십시오.

NOT 논리적-NOT. 우선 순위가 낮은 점을 빼고는 ! 연산자와 동일합니다 예를 들어, not (x = 3 or y = 3)!(x = 3 or y = 3)와 같습니다.
AND
&&
둘 모두 논리적-AND입니다. 예를 들어: x > 3 and x < 10. 수행성능을 개선하기 위해, 단축-회로 평가가 적용됩니다. 또한, AND/OR/&&/|| (또는 기타 다른 연산자)로 시작하는 줄은 자동으로 윗 줄에 추가됩니다.
OR
||
둘 모두 논리적-OR입니다. 예를 들어: x <= 3 or x >= 10. 수행성능을 개선하기 위해, 단축-회로 평가가 적용됩니다.
?: 삼진 연산자 [v1.0.46+]. 이 연산자는 if-else 서술문을 간략하게 교체한 것입니다. 왼쪽의 조건을 평가해 보고 두 분기 중에서 어느 쪽을 최종 결과로 할지 결정합니다. 예를 들어, var := x>y ? 2 : 3는 x가 y보다 크면 2를 Var에 저장하고; 그렇지 않으면 3을 저장합니다. 수행 성능을 개선하기 위하여, 오직 참인 분기만 평가됩니다 (단축-회로 평가를 참조하십시오).
:=
+=
-=
*=
/=
//=
.=
|=
&=
^=
>>=
<<=
>>>=

할당. 변수의 내용에 연산을 수행하고 그 결과를 다시 같은 변수에 저장합니다 (그러나 1.0.46 이전 버전에서는 한 줄 위에서 가장 왼쪽 연산자로만 사용할 수 있었습니다. 그리고 연산자를 앞쪽 다섯 개까지만 지원했습니다.). 가장 단순한 할당 연산자는 쌍점-등호 (:=)입니다. 표현식의 결과를 변수에 저장합니다. 다른 연산자들이 어떤 일을 하는지 그 설명은 이 표에서 관련 엔트리를 참조하십시오. 예를 들어, Var //= 2바닥 나눗셈을 수행하여 Var를 2로 나눈 다음, 그 결과를 다시 Var에 저장합니다. 비슷하게, Var .= "abc"Var := Var . "abc"를 간략하게 작성한 것입니다.

대부분의 다른 연산자와 다르게, 할당은 오른쪽에서 왼쪽으로 평가됩니다. 결과적으로 Var1 := Var2 := 0와 같은 줄은 제일 먼저 0을 Var2에 할당한 다음 Var2Var1에 할당합니다.

할당을 다른 연산자의 입력으로 사용하면, 그의 값은 변수 자체입니다. 예를 들어, 표현식 (Var+=2) > 50Var에 새로-증가된 값이 50을 초과할 경우에만 참입니다. 이렇게 하면 할당을 ByRef로 건넬 수 있는데, 즉, 그의 주소로 건넬 수 있습니다; 예를 들어: &(x:="abc").

할당 연산자의 우선순위는 구문 에러를 피하거나 보다 직관적인 행위를 제공하면 자동으로 높아집니다. 예를 들어: not x:=ynot (x:=y)로 평가됩니다. 비슷하게, ++Var := X++(Var := X)으로 평가됩니다; 그리고 Z>0 ? X:=2 : Y:=2Z>0 ? (X:=2) : (Y:=2)으로 평가됩니다.

>>>= requires [v1.1.35+].

하위 호환의 문제 때문에 야기되는 알려진 제한이 있습니다 (미래의 버전에서는 해결될 수 있습니다): 1) /=가 표현식에서 가장 왼쪽의 연산자이고 다중-서술문 표현식의 일부가 아니면, 바닥 나눗셈(floor division)을 수행합니다. 입력 중 하나라도 부동 소수점 수가 아니어야 합니다 (다른 경우는 모두, /=실수 나눗셈(true division)을 합니다.); 2) 날짜/시간 계산+=-= 이 지원합니다. 그러나 오직 그 연산자가 한 줄의 가장 왼쪽에 홀로 있을 때만 지원합니다; 3) 연산자 +=, -=, 그리고 *= 는 빈 변수를 0으로 취급합니다. 그러나 한 줄에 홀로 있을 경우에만 그렇습니다; 예를 들어, y:=1, x+=1MsgBox % x-=3는 둘 다 x가 비어 있을 때 빈 결과를 산출합니다.

,

쉼표 (다중-서술문) [v1.0.46+]. 쉼표를 사용하면 여러 하위 표현식을 한 줄에 작성할 수 있습니다. 다중 할당이나 함수 호출을 그룹짓는데 자주 사용됩니다. 예를 들어: x:=1, y+=2, ++index, MyFunc(). 그런 서술문들은 왼쪽에서 오른쪽으로 순서대로 실행됩니다.

주의: 쉼표로 (또는 다른 연산자로) 시작하는 줄은 자동으로 윗 줄에 추가됩니다. 다음 참조: 쉼표의 연산 성능.

[v1.0.46.01+]: 쉼표 다음에 곧바로 변수가 따라 오고 다음에 등호 사인이 오면, 그 등호 사인은 자동으로 할당 (:=)으로 취급됩니다. 예를 들어, 다음은 모두 할당입니다: x:=1, y=2, a=b=c. 새 스크립트는 이 행위에 의존하면 안됩니다. 나중에 변경될 수도 있기 때문입니다. 규칙은 오직 평범한 변수에만 적용될 뿐 이중-참조(double-derefs)에는 적용되지 않습니다. 그래서 다음은 오직 하나의 할당만 담겨 있습니다: x:=1, %y%=2

The following types of sub-expressions override precedence/order of evaluation:

Expression 설명
(expression)

Any sub-expression enclosed in parentheses. For example, (3 + 2) * 2 forces 3 + 2 to be evaluated first.

For a multi-statement expression, the result of the first statement is returned. For example, (a := 1, b := 2, c := 3) returns 1.

mod()
round()
abs()

Function call. The function name must be immediately followed by an open-parenthesis, without any spaces or tabs in between. For details, see Functions.

%func%()

See Dynamically Calling a Function.
func.()

Deprecated: This syntax is not recommended for use. Use %func%() (for function names and objects) or func.Call() (for function objects) instead.

[AHK_L 48+]: 객체 func에서 빈 이름의 메쏘드를 호출하려고 시도합니다. 관례적으로, 객체의 "기본" 메쏘드가 호출됩니다. func에 객체가 없다면, 대신에 기본 베이스 객체가 요청됩니다.

[v1.0.95+]: func에 함수 이름이 있다면, 그 함수가 호출됩니다.

Fn(Params*)

[AHK_L 60+]: Variadic function call. Params is an array (object) containing parameter values.

x[y]
[a, b, c]

[AHK_L 31+]: Member access. Get or set a value or call a method of object x, where y is a parameter list (typically an array index or key) or an expression which returns a method name.

[v1.0.97+]: Array literal. If the open-bracket is not preceded by a value (or a sub-expression which yields a value), it is interpreted as the beginning of an array literal. For example, [a, b, c] is equivalent to Array(a, b, c) (a, b and c are variables).

See array syntax and object syntax for more details.

{a: b, c: d}

[v1.0.97+]: Object literal. Create an object or associative array. For example, x := {a: b} is equivalent to x := Object("a", b) or x := Object(), x.a := b. See Associative Arrays for details.


수행 성능: [v1.0.48+]: 쉼표 연산자는 보통 별도의 표현식을 작성하는 것보다 더 빠릅니다. 특히 한 변수를 또다른 변수에 할당할 때 그렇습니다 (예, x:=y, a:=b). 표현식이 모이고 모여 하나의 표현식으로 결합될 수록 수행성능이 향상됩니다; 예를 들어, 다섯개나 열 개의 단순한 표현식을 하나의 표현식으로 결합하면 35% 정도 더 빠릅니다.

내장 변수

The variables below are built into the program and can be referenced by any script.

See Built-in Variables for general information.

목차

특수 문자

변수 설명
A_Space 이 변수는 스페이스 문자가 하나 담겨 있습니다. 자세한 것은 AutoTrim을 참조하십시오.
A_Tab 이 변수는 탭 문자 하나가 담겨 있습니다. 자세한 것은 AutoTrim을 참조하십시오.

스크립트 특성

변수 설명
1, 2, 3, 등등. 이 변수들은 스크립트가 명령어줄 매개변수와 함께 기동할 때마다 자동으로 생성됩니다. 마치 보통의 변수 이름처럼 똑같이 참조하고 변경할 수 있습니다 (예: %1%), but cannot be referenced directly in an expression. 변수 %0%에는 건네어진 매개변수의 개수가 담겨 있습니다 (아무것도 없으면 0입니다). 자세한 것은 명령어 줄 매개변수를 참조하십시오.
A_Args
[v1.1.27+]
Contains an array of command line parameters. For details, see Passing Command Line Parameters to a Script.
A_WorkingDir 스크립트의 현재 작업 디렉토리로서, 기본값으로 여기에서 파일에 접근합니다. 마지막의 역사선은 루트 디렉토리가 아닌 한 포함되지 않습니다. 다음은 두 개의 예입니다: C:\ 그리고 C:\My Documents. SetWorkingDir를 사용하면 작업 디렉토리를 바꿀 수 있습니다.
A_InitialWorkingDir
[v1.1.35+]
The script's initial working directory, which is determined by how it was launched. For example, if it was run via shortcut -- such as on the Start Menu -- its initial working directory is determined by the "Start in" field within the shortcut's properties.
A_ScriptDir 현재 스크립트가 위치한 디렉토리의 완전한 경로입니다. 마지막의 역사선은 생략합니다 (루트 디렉토리도 마찬가지로 생략합니다).
A_ScriptName

현재 스크립트의 파일 이름입니다. 경로가 없습니다. 예, MyScript.ahk

If the script is compiled or embedded, this is the name of the current executable file.

A_ScriptFullPath

The full path of the current script, e.g. C:\Scripts\My Script.ahk

If the script is compiled or embedded, this is the full path of the current executable file.

A_ScriptHwnd
[v1.1.01+]
스크립트의 숨은 메인 창의 유일한 ID (HWND/핸들).
A_LineNumber

스크립트 안에서 현재 실행중인 줄의 번호입니다 (또는 그의 #Include 파일 중 하나입니다). 이 줄 번호는 ListLines이 보여주는 줄 번호와 일치합니다; 다음 예제와 같이 에러를 보고할 경우에 유용하게 사용할 수 있습니다: MsgBox 로그 파일에 기록할 수 없었음 (줄 번호: %A_LineNumber%).

컴파일된 스크립트는 자신의 모든 #Include 파일들을 하나의 커다란 스크립트로 병합해 넣기 때문에, 비-컴파일 모드에서 실행할 때와 줄 번호가 다를 수 있습니다.

A_LineFile

The full path and name of the file to which A_LineNumber belongs. If the script was loaded from an external file, this is the same as A_ScriptFullPath unless the line belongs to one of the script's #Include files.

If the script was compiled based on a .bin file, this is the full path and name of the current executable file, the same as A_ScriptFullPath.

[v1.1.34+]: If the script is embedded, A_LineFile contains an asterisk (*) followed by the resource name; e.g. *#1

A_ThisFunc
[v1.0.46.16+]
현재 실행 중인 사용자-정의 함수의 이름입니다 (없으면 비어 있습니다); 예를 들어: MyFunction. 다음 참조: IsFunc()
A_ThisLabel
[v1.0.46.16+]
현재 실행 중인 라벨 (서브루틴)의 이름입니다 (없으면 비어 있습니다); 예를 들어: MyLabel. 스크립트가 Gosub/Return 또는 Goto를 실행할 때마다 갱신됩니다. 또 자동으로-호출되는 라벨에 대해서도 갱신됩니다. 여기에는 타이머, GUI 쓰레드, 메뉴 항목, 핫키, 핫스트링, OnClipboardChange 라벨, 그리고 OnExit 라벨이 있습니다. 그렇지만, 실행이 위의 자동-호출 라벨로부터 또다른 라벨로 "떨어지는"경우 A_ThisLabel는 갱신되지 않습니다; 그런 일이 일어나면, A_ThisLabel은 이전의 값을 유지합니다. 다음 참조: A_ThisHotkey 그리고 IsLabel()
A_AhkVersion 1.0.22 이전 버전에서, 이 변수는 비어 있습니다. 그렇지 않으면, 스크립트를 실행하고 있는 오토핫키의 버전이 담깁니다. 예, 1.0.22. 컴파일된 스크립트의 경우, 원래 컴파일에 사용된 버전이 보고됩니다. 버전 번호의 형식을 보고 스크립트는 A_AhkVersion이 다음 예와 같이 ">" 또는 ">="로 최소한의 버전 번호보다 큰지 점검할 수 있습니다: if A_AhkVersion >= 1.0.25.07. 다음 참조: #Requires and VerCompare()
A_AhkPath

For non-compiled or embedded scripts: 현재 스크립트를 실제로 실행중인 EXE 파일의 이름과 전체 경로입니다. 예를 들어: C:\Program Files\AutoHotkey\AutoHotkey.exe

For compiled scripts based on a .bin file, the value is determined by reading the installation directory from the registry and appending "\AutoHotkey.exe". If AutoHotkey is not installed, the value is blank. The example below is equivalent:

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

[v1.1.34+]: For compiled scripts based on an .exe file, A_AhkPath contains the full path of the compiled script. This can be used in combination with /script to execute external scripts. To instead locate the installed copy of AutoHotkey, read the registry as shown above.

A_IsUnicode

문자열이 유니코드 (16-비트)이면 1이 ANSI (8-비트)이면 빈 문자열이 담깁니다 (거짓으로 간주됨). 문자열의 형식은 스크립트를 실행하는 데 사용된 AutoHotkey.exe 버전에 따라 다릅니다. 컴파일된 스크립트라면, 컴파일에 사용된 실행파일에 따라 다릅니다.

For ANSI executables prior to [v1.1.06], A_IsUnicode was left undefined; that is, the script could assign to it, and attempting to read it could trigger a UseUnsetGlobal warning. In later versions it is always defined and is read-only.

A_IsCompiled

스크립트가 컴파일 된 EXE로 실행되면 1이 그렇지 않으면 빈 문자열이 담깁니다 (거짓으로 간주).

For non-compiled scripts prior to [v1.1.06], A_IsCompiled was left undefined; that is, the script could assign to it, and attempting to read it could trigger a UseUnsetGlobal warning. In later versions it is always defined and is read-only.

A_ExitReason 스크립트를 끝내게 된 가장 최근의 이유입니다. 이 변수는 스크립트에 OnExit 서브루틴이 있고 그 서브루틴이 현재 실행중이거나 종료 시도로 적어도 한 번 호출된 적이 없는 한, 비어 있습니다. 자세한 것은 OnExit을 참조하십시오.

날짜와 시간

변수 설명
A_YYYY

현재의 4-자리 년도입니다 (예, 2004). A_Year와 동의어입니다.

주의: 여러분의 로케일과 언어에 대하여 적절하게 포맷된 날짜와 시간을 열람하려면, FormatTime, OutputVar (시간과 긴 날짜) 또는 FormatTime, OutputVar,, LongDate (긴-형식의 날짜를 열람)를 사용하십시오.

A_MM 현재의 2-자리 월입니다 (01-12). A_Mon와 동일합니다.
A_DD 현재 2-자리 월별 날짜입니다 (01-31). A_MDay와 동일합니다.
A_MMMM 현재 사용자 언어로 현재 달의 전체 이름입니다. 예, July
A_MMM 현재 사용자 언어로 현재 달의 약자입니다. 예, Jul
A_DDDD 현재 사용자 언어로 현재 요일의 전체 이름입니다. 예, Sunday
A_DDD Current day of the week's abbreviation in the current user's language, e.g. Sun
A_WDay 현재 요일의 1-자리 수입니다 (1-7). 1은 모든 로케일에서 일요일입니다.
A_YDay 연별 현재 날짜입니다 (1-366). 값은 0으로 채워지지 않습니다. 예를 들어, 0이 열람되지, 009가 열람되는 것은 아닙니다. 0으로 덧대어진 값을 열람하려면, 다음을 사용합니다: FormatTime, OutputVar,, YDay0.
A_YWeek ISO 8601에 따른 현재 년도와 주 번호 (예. 200453). 년도와 주를 가르려면 Year := SubStr(A_YWeek, 1, 4) 그리고 Week := SubStr(A_YWeek, -1)를 사용합니다. A_YWeek의 정밀한 정의: 1월 1일을 포함한 주가 새 해에서 4 일 이상 포함되어 있으면, 첫 번째 주로 간주됩니다. 그렇지 않으면, 이전 해의 마지막 주로 간주됩니다. 그리고 그 다음 주가 새 해의 첫 주가 됩니다.
A_Hour 24시간제로 현재의 2-자리 시 (00-23) (예를 들어, 17는 오후 5시). AM/PM 표시와 함께 12시간제로 열람하려면, 다음 예를 따르십시오: FormatTime, OutputVar, , h:mm:ss tt
A_Min

현재 2-자리 분 (00-59).

A_Sec 현재 2-자리 초 (00-59).
A_MSec 현재 3-자리 밀리초 (000-999). 앞의 0을 제거하려면 다음 예제를 따르십시오: Milliseconds := A_MSec + 0.
A_Now

YYYYMMDDHH24MISS 형식으로 현재 로컬 시간 입니다.

주의: 날짜와 시간 연산은 EnvAdd 그리고 EnvSub로 수행할 수 있습니다. 또, FormatTime으로 날짜와 시간을 여러분의 로케일 또는 기호에 맞게 포맷할 수 있습니다.

A_NowUTC 현재의 협정 세계시(Coordinated Universal Time (UTC))입니다. 형식은 YYYYMMDDHH24MISS입니다. UTC는 본질적으로 그리니치 표준시(Greenwich Mean Time (GMT))과 똑같습니다.
A_TickCount

The number of milliseconds that have elapsed since the system was started, up to 49.7 days. A_TickCount를 변수에 저장해 두고 나중에 가장 마지막 A_TickCount 값에서 빼어서 경과한 시간을 측정할 수 있습니다. 예를 들어:

StartTime := A_TickCount
Sleep, 1000
ElapsedTime := A_TickCount - StartTime
MsgBox,  %ElapsedTime% 밀리초가 경과하였습니다.

A_TickCount의 밀리초보다 더 정밀해야 한다면, QueryPerformanceCounter()를 사용합니다.

스크립트 설정

변수 설명
A_IsSuspended 스크립트가 보류중이면(suspended) 1이 그렇지 않으면 0이 담깁니다.
A_IsPaused
[v1.0.48+]
현재 쓰레드 바로 아래의 쓰레드정지되어 있으면 1이 담깁니다. 그렇지만 0이 담깁니다.
A_IsCritical
[v1.0.48+]
현재 쓰레드에 대하여 임계구역 밖이면 0이 담깁니다. 그렇지 않으면 0보다 큰 정수값이 담깁니다. 즉, Critical에서 메시지-점검 빈도를 사용중입니다. Critical 0이면 임계 구역 점검을 끄기 때문에, 임계 구역의 현재 상태를 저장하고 나중에 Old_IsCritical := A_IsCritical를 한 다음에 Critical %Old_IsCritical%를 통하여 복구할 수 있습니다.
A_BatchLines (A_NumBatchLines와 동의어) SetBatchLines에 의하여 설정된 현재 값입니다. 예제: 200 또는 10ms (포맷에 따라 다름).
A_ListLines
[v1.1.28+]
Contains 1 if ListLines is enabled. 그렇지만 0이 담깁니다.
A_TitleMatchMode SetTitleMatchMode가 설정한 현재 부합모드입니다: 1, 2, 3, 또는 RegEx.
A_TitleMatchModeSpeed SetTitleMatchMode가 설정한 현재 일치 속도입니다 (fast 또는 slow) .
A_DetectHiddenWindows DetectHiddenWindows가 설정한 현재 모드입니다 (On 또는 Off).
A_DetectHiddenText DetectHiddenText가 설정한 현재 모드입니다 (On 또는 Off).
A_AutoTrim AutoTrim이 설정한 현재 모드입니다 (On 또는 Off) .
A_StringCaseSense StringCaseSense가 설정한 현재 모드입니다 (On, Off, 또는 Locale) .
A_FileEncoding [AHK_L 46+]: 다양한 명령어에 대하여 기본 인코딩을 담고 있습니다; FileEncoding을 참조하십시오.
A_FormatInteger SetFormat이 설정한 현재 정수 형식 (H 또는 D). [AHK_L 42+]: 이것은 소문자 h를 담을 수도 있습니다.
A_FormatFloat SetFormat이 설정한 현재 부동 소수점 수 형식.
A_SendMode [v1.1.23+]: SendMode가 설정한 현재 모드입니다 (Event, Input, Play, 또는 InputThenPlay).
A_SendLevel [v1.1.23+]: The current SendLevel setting (an integer between 0 and 100, inclusive).
A_StoreCapsLockMode [v1.1.23+]: SetStoreCapsLockMode가 설정한 현재 모드입니다 (On 또는 Off).
A_KeyDelay
A_KeyDuration
The current delay or duration set by SetKeyDelay (always decimal, not hex). A_KeyDuration requires [v1.1.23+].
A_KeyDelayPlay
A_KeyDurationPlay
The current delay or duration set by SetKeyDelay for the SendPlay mode (always decimal, not hex). [v1.1.23+] 필요.
A_WinDelay SetWinDelay가 설정한 현재 지연 시간 (언제나 십진법을 사용합니다).
A_ControlDelay SetControlDelay가 설정한 현재 지연 시간 (언제나 10진수를 사용합니다).
A_MouseDelay
A_MouseDelayPlay
SetMouseDelay가 설정한 현재 지연 시간 (언제나 십지수를 사용합니다). A_MouseDelay is for the traditional SendEvent mode, whereas A_MouseDelayPlay is for SendPlay. A_MouseDelayPlay requires [v1.1.23+].
A_DefaultMouseSpeed SetDefaultMouseSpeed가 설정한 현재 속도 (언제나 십진법을 사용합니다. 십육진법은 사용하지 않습니다).
A_CoordModeToolTip
A_CoordModePixel
A_CoordModeMouse
A_CoordModeCaret
A_CoordModeMenu
[v1.1.23+]: CoordMode가 설정한 현재 모드입니다 (Window, Client, 또는 Screen).
A_RegView [v1.1.08+]: SetRegView가 설정한 현재 레지스트리 뷰입니다.
A_IconHidden 트레이 아이콘이 현재 보이지 않으면 1 그렇지 않으면 0이 담깁니다. 아이콘은 #NoTrayIcon이나 Menu 명령어를 통하여 감출 수 있습니다.
A_IconTip 트레이 아이콘에 맞춤 툴팁이 Menu, Tray, Tip을 통하여 지정되어 있지 않은 한, 비어 있습니다 -- 지정되어 있으면 툴팁 텍스트가 담깁니다.
A_IconFile 맞춤 트레이 아이콘Menu, tray, icon을 통하여 지정되어 있지 않은 한 비어 있습니다 --지정 되어 있을 경우 그 아이콘 파일의 전체 경로와 이름이 담깁니다.
A_IconNumber A_IconFile이 비어 있으면 비어 있습니다. 그렇지 않으면, A_IconFile의 아이콘 번호입니다 (전형적으로 1).

User Idle Time

변수 설명
A_TimeIdle 키보드나 마우스 또는 기타 입력으로부터 시스템이 입력을 받은 이후로 경과한 시간의 밀리초 개수입니다. 사용자가 컴퓨터 앞에 있는지 판단하는데 유용합니다. 사용자로부터 받는 물리적 입력과 더불어 프로그램이나 스크립트가 만들어 내는 인위적인 입력은 (Send 또는 MouseMove 명령어) 이 값을 다시 0으로 재설정합니다. 이 값은 10씩 증가하는 경향이 있기 때문에, 다른 값과 같은지 비교하면 안됩니다. 대신에, 다른 값보다 큰지 작은지로 비교하십시오. 예를 들어: IfGreater, A_TimeIdle, 600000, MsgBox, 마지막 키보드나 마우스 활동이 적어도 10 분 전이었습니다.
A_TimeIdlePhysical 위와 비슷하지만 상응하는 갈고리가 설치되어 있으면 인위적인 키눌림과 마우스 클릭을 무시합니다. (keyboard 또는 mouse); 즉, 오직 물리적 이벤트에만 응답합니다. (마치 사용자가 존재하는 듯이 키보드나 마우스 클릭을 흉내내는 것을 방지합니다.) 갈고리가 설치되어 있지 않으면, 이 값은 A_TimeIdle과 동등합니다. 둘 중에 하나의 갈고리만 설치되어 있으면, 물리적 입력의 유형만 A_TimeIdlePhysical에 영향을 미칩니다 (다른/설치-안된 갈고리의 입력은, 물리적 입력과 인위적 입력에 모두 영향이 없습니다).
A_TimeIdleKeyboard
[v1.1.28+]
If the keyboard hook is installed, this is the number of milliseconds that have elapsed since the system last received physical keyboard input. Otherwise, this variable is equivalent to A_TimeIdle.
A_TimeIdleMouse
[v1.1.28+]
If the mouse hook is installed, this is the number of milliseconds that have elapsed since the system last received physical mouse input. Otherwise, this variable is equivalent to A_TimeIdle.

GUI 창과 메뉴 바

변수 설명
A_DefaultGui [v1.1.23+] The name or number of the current thread's default GUI.
A_DefaultListView [v1.1.23+] The variable name or HWND of the ListView control upon which the ListView functions operate. If the default GUI lacks a ListView, this variable is blank.
A_DefaultTreeView [v1.1.23+] The variable name or HWND of the TreeView control upon which the TreeView functions operate. If the default GUI lacks a TreeView, this variable is blank.
A_Gui 현재 쓰레드를 기동한 GUI의 이름이나 번호입니다. 이 변수는 Gui 콘트롤, 메뉴 바 항목, 또는 GuiClose/GuiEscape와 같은 이벤트가 현재 쓰레드를 기동하지 않았다면 비어 있습니다.
A_GuiControl 현재 쓰레드를 기동한 구이 콘트롤에 연관된 변수의 이름입니다. 구이 콘트롤에 연관 변수가 없으면, 대신에 A_GuiControl에는 해당 콘트롤의 텍스트/캡션의 앞쪽 63개의 문자가 담깁니다 (각 버튼에 변수 이름을 부여하지 않기 위해 자주 사용됩니다). A_GuiControl은 다음과 같은 경우 비어 있습니다: 1) A_Gui가 비어 있다; 2) GUI 메뉴 바 항목이나 GuiClose/GuiEscape과 같은 이벤트가 현재 쓰레드를 기동시켰다; 3) 콘트롤에 연관 변수가 없으며 캡션도 없다; 4) 또는 현재 쓰레드를 기동시킨 최초의 콘트롤이 (아마도 Gui Destroy 때문에 더 이상 존재하지 않는다).
A_GuiWidth
A_GuiHeight
GuiSize 서브루틴에서 참조할 때 GUI 창의 너비와 높이가 담깁니다. 창의 클라이언트 구역에 적용됩니다. 클라이언트 구역은 타이틀 바와 메뉴 바 그리고 테두리를 제외한 구역입니다. [v1.1.11+]: 이 값들은 DPI 스케일링에 영향을 받습니다.
A_GuiX
A_GuiY
GuiContextMenu 이벤트와 GuiDropFiles 이베트가 일어날 때 X 좌표와 Y 좌표를 담고 있습니다. 좌표는 창의 조상단 모서리에 상대적입니다. [v1.1.11+]: 이 값들은 DPI 스케일링에 영향을 받습니다.
A_GuiEvent
또는 A_GuiControlEvent

현재 쓰레드를 기동한 이벤트의 종류. 쓰레드가 GUI 행위를 통하여 기동되지 않았다면, 이 변수는 비어 있습니다. 그렇지 않으면, 다음 문자열 중 하나가 담깁니다:

Normal: The event was triggered by a single left-click or via keystrokes (, , , , Tab, Space, underlined shortcut key, etc.). 이 값은 또GuiClose 그리고 GuiEscape와 같은 특수한 이벤트 그리고 메뉴 바 항목에도 사용됩니다.

DoubleClick: 이벤트가 더블클릭으로 촉발되었습니다. 주의: 클릭-쌍 중에 첫 클릭은 먼저 Normal 이벤트를 받습니다. 다시 말해, 서브루틴은 두 번 기동됩니다: 한 번은 첫 클릭에 그리고 다시 두 번째 클릭에 기동됩니다.

RightClick: 오직 GuiContextMenu, ListViews, 그리고 TreeViews에만 일어납니다.

문맥-감지 값: 자세한 것은 GuiContextMenu, GuiDropFiles, Slider, MonthCal, ListView, 그리고 TreeView를 참조하십시오.

A_EventInfo

다음 이벤트들에 대한 추가 정보를 담고 있습니다:

주의: A_ThisHotkey와 같은 변수와 다르게, 각 쓰레드마다 A_Gui, A_GuiControl, A_GuiX/Y, A_GuiEvent, 그리고 A_EventInfo에 대하여 자신의 값을 유지합니다. 그러므로, 쓰레드가 다른 쓰레드에 의해 인터럽트 되더라도, 실행을 재개하면 여전히 이 값들에서 자신의 원래/올바른 값을 볼 수 있습니다.

핫키, 핫스트링, 그리고 맞춤 메뉴 항목

변수 설명
A_ThisMenuItem 가장 최근에 선택된 맞춤 메뉴 항목의 이름입니다 (없으면 비어 있습니다).
A_ThisMenu A_ThisMenuItem가 선택된 곳의 메뉴 이름입니다.
A_ThisMenuItemPos 안에서 A_ThisMenuItem의 현재 위치를 가리키는 번호입니다. 메뉴에서 첫 번째 항목은 1이고, 두 번째 항목은 2, 등등입니다. 메뉴 가름자 줄도 계산에 들어 갑니다. 이 변수는 A_ThisMenu메뉴 안에 A_ThisMenuItem이 비어 있거나 더 이상 존재하지 않으면 비어 있습니다. 또 A_ThisMenu 자체가 존재하지 않을 경우에도 비어 있습니다.
A_ThisHotkey

가장 최근에 실행된 핫키 또는 비-자동-교체 핫스트링입니다 (없으면 비어 있습니다). 예, #z. 이 값은 현재 쓰레드가 또다른 핫키로 인터럽트 되면 변합니다. 그래서 나중에 서브루틴에서 사용하기 위해 원래 값이 필요하다면 즉시 또다른 변수에 복사하십시오.

핫키가 처음으로 - 스크립트에서 핫키 명령어이중-쌍점 라벨로 -- 만들어질 때, 그의 키 이름과 그의 수식 심볼의 순서가 그 핫키의 영구적인 이름이 됩니다. 그 이름을 핫키의 모든 변형들이 공유합니다.

When a hotstring is first created, the exact text used to create it becomes the permanent name of the hotstring.

다음 참조: A_ThisLabel

A_PriorHotkey 위와 같지만 이전의 핫키는 제외합니다. 없으면 비어 있습니다.
A_PriorKey [v1.1.01+]: 가장 최근의 키-누름이나 키-뗌보다 앞에 눌린 마지막 키의 이름입니다. 아니면 키 히스토리에서 적용가능한 키-누름을 발견할 수 없을 경우 비어 있습니다. 오토핫기 스크립트가 생성한 모든 입력은 배제됩니다. 이 변수를 사용하려면, 키보드 갈고리마우스 갈고리가 반드시 설치되어 있어야 하고 키 히스토리가 활성화되어 있어야 합니다.
A_TimeSinceThisHotkey A_ThisHotkey가 눌린 이후로 경과한 밀리초의 개수입니다. A_ThisHotkey가 빌 때마다 -1이 됩니다.
A_TimeSincePriorHotkey A_PriorHotkey가 눌린 이후로 경과한 밀리초의 개수입니다. A_PriorHotkey가 빌 때마다 -1이 됩니다.
A_EndChar 가장 최근의 비-자동-교체-핫스트링을 촉발시키기 위해 사용자가 누른 종료 문자(ending character)입니다. 종료 문자를 ( * 옵션 때문에) 요구하지 않았다면, 이 값은 비어 있습니다.

운영 체제와 사용자 정보

변수 설명
ComSpec [v1.0.43.08+]
A_ComSpec [v1.1.28+]

Contains the same string as the environment's ComSpec variable. 종종 Run/RunWait와 함께 사용됩니다. 예를 들어:

C:\Windows\system32\cmd.exe
A_Temp
[v1.0.43.09+]

임시 파일을 보유하도록 지정된 폴더의 전체 경로와 이름. (순서대로) 다음 위치 중 하나에서 열람합니다: 1) 환경 변수 TMP, TEMP, 또는 USERPROFILE; 2) Windows 디렉토리. 예를 들어:

C:\Users\<UserName>\AppData\Local\Temp
A_OSType 실행 중인 운영 체제의 종류입니다. AutoHotkey 1.1은 오직 NT-기반의 운영 체제만 지원하기 때문에, 이 값은 언제나 WIN32_NT입니다. 예전 버전은 Windows 95/98/ME에서 실행될 때 WIN32_WINDOWS를 돌려줍니다.
A_OSVersion

다음 문자열 중 하나입니다: WIN_7 [requires AHK_L 42+], WIN_8 [requires v1.1.08+], WIN_8.1 [requires v1.1.15+], WIN_VISTA, WIN_2003, WIN_XP, WIN_2000.

호환성 설정을 오토핫키 실행파일이나 컴파일된 스크립트의 특성에 적용하면 운영체제가 다른 버전 번호를 돌려줍니다. 이것이 A_OSVersion에 반영됩니다.

[v1.1.20+]: OS 버전을 위에 언급한 리스트에서 찾을 수 없으면, 문자열이 "major.minor.build" 형태로 반환됩니다. For example, 10.0.14393 is Windows 10 build 14393, also known as version 1607.

; 이 예제는 폐기되었습니다. 이 운영체제는 더 이상 지원하지 않습니다.
if A_OSVersion in WIN_NT4,WIN_95,WIN_98,WIN_ME  ; 주의: 쉼표 둘레에 스페이스가 없음에 주의합니다.
{
    MsgBox 이 스크립트는 Windows 2000/XP 이상을 요구합니다.
    ExitApp
}
A_Is64bitOS [v1.1.08+]: 운영체제가 64비트이면 1 (true) 또는 운영체제가 32비트이면 0 (false)을 담고 있습니다.
A_PtrSize [AHK_L 42+]: 포인터의 크기를 바이트 단위로 담고 있습니다. 이것은 4 (32-bit) 또는 8 (64-bit)입니다. 어떤 유형의 실행파일을 (EXE) 스크립트가 실행하는가에 따라 다릅니다.
A_Language 시스템의 기본 언어입니다 다음 4-자리 코드중 하나입니다.
A_ComputerName 네트워크에 보여지는 컴퓨터 이름입니다.
A_UserName 이 스크립트를 기동한 사용자의 로그온 이름입니다.
A_WinDir 윈도우즈 디렉토리입니다. 예를 들어: C:\Windows
A_ProgramFiles
또는 ProgramFiles

프로그램 파일 디렉토리입니다 (예, C:\Program Files 또는 C:\Program Files (x86)). This is usually the same as the ProgramFiles environment variable.

On 64-bit systems (and not 32-bit systems), the following applies:

  • If the executable (EXE) that is running the script is 32-bit, A_ProgramFiles returns the path of the "Program Files (x86)" directory.
  • For 32-bit processes, the ProgramW6432 environment variable contains the path of the 64-bit Program Files directory. On Windows 7 and later, it is also set for 64-bit processes.
  • The ProgramFiles(x86) environment variable contains the path of the 32-bit Program Files directory.

[v1.0.43.08+]: A_ prefix를 생략해도 가능합니다. 그러면 쉽게 #NoEnv이전하는 데 도움이 됩니다.

A_AppData
[v1.0.43.09+]

현재 사용자 어플리케이션의 특정한 데이터를 담고 있는 폴더의 전체 경로와 이름입니다. 예를 들어:

C:\Users\<UserName>\AppData\Roaming
A_AppDataCommon
[v1.0.43.09+]

모든-사용자 어플리케이션의 특정한 데이터를 담고 있는 폴더의 전체 경로와 이름입니다. 예를 들어:

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

현재 사용자 시작 메뉴에 있는 프로그램 폴더의 전체 경로와 이름입니다. 예를 들어:

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

모든 사용자 시작 메뉴에 있는 프로그램 폴더의 전체 경로와 이름입니다. 예를 들어:

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

현재 사용자의 "나의 문서" 폴더의 전체 경로와 이름입니다. 대부분의 비슷한 변수와 다르게, 이 폴더가 드라이브의 루트이면, 마지막 역사선을 포함하지 않습니다 (예를 들어, M:\가 아니라 M:이 됩니다). 예를 들어:

C:\Users\<UserName>\Documents
A_IsAdmin

현재 사용자가 관리자 권한이 있으면, 이 변수는 1, 그렇지 않으면 0이 담깁니다.

To have the script restart itself as admin (or show a prompt to the user requesting admin), use Run *RunAs. However, note that running the script as admin causes all programs launched by the script to also run as admin. For a possible alternative, see the FAQ.

A_ScreenWidth
A_ScreenHeight

기본 모니터의 너비와 높이, 픽셀 단위 (예, 1024 그리고 768).

다중 모니터 시스템에서 다른 모니터의 크기를 알려면, SysGet를 사용합니다.

대신에 (다중 모니터에 걸쳐 있더라도) 전체 데스크탑의 너비와 높이를 알려면, 다음 예제를 사용합니다:

SysGet, VirtualWidth, 78
SysGet, VirtualHeight, 79

게다가, SysGet을 사용하면 모니의 작업 영역을 알 수 있습니다. 모니터의 전체 영역보다 더 작을 수 있습니다. 왜냐하면 태스크바와 기타 등록된 데스크탑 툴바가 배제되어 있기 때문입니다.

A_ScreenDPI [v1.1.11+] 화면 너비를 따라 논리적 인치당 픽셀의 개수입니다. 다중 모니터 시스템에서, 이 값은 모든 모니터에 대하여 같습니다. 대부분의 시스템에 이 값은 96입니다; 그렇지만 시스템의 텍스트 크기(DPI) 설정에 따라 다릅니다. 또 Gui -DPIScale을 참조하십시오.
A_IPAddress1 through 4 컴퓨터에서 네트워크 어댑터의 IP 주소의 앞쪽 4 자리입니다.

기타

변수 설명
A_Cursor

현재 화면에 보여지는 마우스 커서의 유형입니다. 다음 단어 중 하나입니다: AppStarting, Arrow, Cross, Help, IBeam, Icon, No, Size, SizeAll, SizeNESW, SizeNS, SizeNWSE, SizeWE, UpArrow, Wait, Unknown. Size-유형의 커서에 사용된 약자는 방위를 나타냅니다. 예, NESW = NorthEast+SouthWest. 손-모양의 커서는 (찍기와 잡기)는 Unknown으로 분류되어 있습니다.

A_CaretX
A_CaretY

현재 캐럿(텍스트 삽입 위치)의 X와 Y 좌표입니다. 이 좌표는 활성 창에 상대적입니다. CoordMode를 사용하여 전체 화면에 대하여 상대적으로 만들지 않는 한 말입니다. 활성 창이 없거나 캐럿 위치를 결정할 수 없으면, 이 변수는 비어 있습니다.

다음 스크립트로 캐럿을 이동시켜서 그의 현재 위치가 자동-갱신 툴팁에 나타나는 것을 볼 수 있습니다. 어떤 창은 (예, MS Word) 실제 위치에 상관 없이 같은 캐럿 위치를 보고합니다.

#Persistent
SetTimer, WatchCaret, 100
return
WatchCaret:
    ToolTip, X%A_CaretX% Y%A_CaretY%, A_CaretX, A_CaretY - 20
return
Clipboard Can be used to get or set the contents of the OS's clipboard. 자세한 것은 Clipboard를 참조하십시오.
A_Clipboard [v1.1.35+]
ClipboardAll 클립보드의 전체 내용입니다 (포맷과 텍스트 같은). 자세한 것은 ClipboardAll를 참조하십시오.
ErrorLevel This variable is set by some commands to indicate their success or failure. 자세한 것은 ErrorLevel를 참조하십시오.
A_LastError OS의 GetLastError() 함수의 결과 또는 COM 객체 요청의 최종 결과. 자세한 것은 DllCall() 그리고 Run/RunWait를 참조합니다.
True
False

Contain 1 and 0. They can be used to make a script more readable. For details, see Boolean Values.

Loop

변수 설명
A_Index 현재 회돌이의 반복 횟수입니다 (64-비트 정수). 예를 들어, 스크립트가 회돌이의 몸체를 처음 실행하면, 이 변수는 숫자 1이 담깁니다. 더 자세한 것은 회돌이 또는 While-회돌이를 참조하십시오.
A_LoopFileName, 등등. 이 변수와 기타 관련 변수들은 파일-회돌이 안에서만 유효합니다.
A_LoopRegName, 등등. 이 변수와 기타 관련 변수들은 레지스트리-회돌이 안에서만 유효합니다.
A_LoopReadLine 파일-읽기 회돌이를 참조하십시오.
A_LoopField 회돌이 파싱하기를 참조하십시오.

변수의 가용성과 메모리