프날 오토핫키 강좌  v2

⚠ 이 강좌는 오토핫키 v2를 다룹니다

지금 보시는 강좌는 과거 오랜 시간동안 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
만약 구버전인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시면 되지만, 새로 오토핫키를 배우신다면 v2 버전을 배우시는 것을 강력히 추천드립니다.

12. 내장 변수


앞서, 변수란 프로그래밍에서 사용되는 어떠한 값에 이름을 붙여둔 것이라고 했습니다. 값을 코드에 직접 적는 대신에, 값이 담긴 변수를 프로그래밍에 직접 사용할 수 있다는 뜻이었죠.

우리가 직접 변수에 값을 담을 수 있지만(=직접 값에 이름을 붙여줄 수 있지만), 오토핫키에서는 미리 내장되어있는 변수가 존재합니다. 내장 변수는 오토핫키에서 미리 만들어둔 변수로서, 주로 시스템과 관련된 여러 값이 존재합니다.

따라서 이런 변수는 만들지 않고 바로 쓰기만 하면 되죠. 이번 강에서는 내장 변수를 알아보고, 사용해보겠습니다.

변수의 사용

우선 변수를 사용해보겠습니다.

1MsgBox(variable)
변수의 사용

변수는 말 그대로 '수'이기 때문에, 문자열을 사용할 때처럼 따옴표 처리를 할 필요가 없습니다. 만약 variable이라는 변수에 Hello, world!라는 문자열 값이 담겨있다면, 알림상자는 Hello, world!를 출력할 것입니다. 물론, 지금은 variable 변수에 아무 값도 담겨있지 않아서 빈 값만 출력됩니다. 어렵지 않죠?

내장 변수

위의 variable 변수와 다르게, 오토핫키에서 자주 쓰이거나 컴퓨터 시스템과 관련된 변수는 따로 값을 담지 않아도 쓸 수 있습니다. 이를 '오토핫키 자체에 내장되어있는 변수'라는 뜻에서 내장 변수라고 부릅니다.

모든 내장 변수를 정리하기엔 너무 많을 뿐더러 그다지 쓸 일이 없는 내장 변수도 많습니다. 모든 내장 변수 목록은 오토핫키 v2 문서(https://www.autohotkey.com/docs/v2/)에서 찾아볼 수 있습니다.

강좌에서는 주요한 내장 변수만 정리해드립니다. 스크립트 파일 / 날짜와 시간 / 운영체제 / 기타와 같이 네 분류로 나누어서 표로 정리해보았습니다. 다시 말씀드리지만, 모든 내장 변수를 적은 것이 아닙니다!

스크립트 파일과 관련된 내장 변수

내장 변수설명
A_WorkingDir현재 스크립트가 실행되고 있는 경로
A_ScriptDir현재 스크립트가 존재하는 경로 (일반적으로 A_WorkingDir과 같음)
A_ScriptName현재 스크립트 파일의 이름
A_ScriptFullPath현재 스크립트의 파일 이름을 포함한 전체 경로
A_AhkVersion현재 실행중인 오토핫키의 버전
A_IsCompiled현재 실행중인 스크립트가 컴파일되었다면 1, 아니라면 0의 값을 가짐

날짜와 시간과 관련된 내장 변수

내장 변수설명 (예시)
A_YYYY 또는 A_Year현재 연도 (2022)
A_MM 또는 A_Mon현재 월 (07)
A_DD 또는 A_MDay현재 일 (31)
A_MMMM현재 월의 전체 명칭 (7월)
A_MMM현재 월의 간략한 명칭 (7)
A_DDDD현재 요일의 전체 명칭 (월요일)
A_DDD현재 요일의 간략한 명칭 (월)
A_WDay현재 주의 일숫자. 일요일은 (1), 월요일은 (2), ... 토요일은 (7)
A_YDay현재 연도의 일숫자. 1월 1일은 (1), 평년 12월 31일은 (365)
A_Hour현재 시 (23)
A_Min현재 분 (59)
A_Sec현재 초 (59)
A_Now현재 날짜 및 시간 - 연월일시분초 (20220727215502)
A_TickCount컴퓨터가 가동된 후 흐른 시간 - 밀리초 (7833703) = 약 2시간 18분

운영체제와 관련된 내장 변수

내장 변수설명
A_TempTemp 폴더의 경로
A_OSVersion현재 운영체제의 버전
A_ComputerName운영체제에 설정된 현재 컴퓨터의 이름
A_UserName운영체제에 설정된 현재 사용자의 이름
A_ProgramFilesProgram Files 폴더의 경로
A_AppDataAppData\Roaming 폴더의 경로
A_Desktop바탕화면의 경로
A_StartMenu시작 메뉴 폴더의 경로
A_Startup시작 프로그램 폴더의 경로
A_MyDocuments문서 폴더의 경로
A_IsAdmin현재 스크립트가 관리자 권한으로 실행되어있으면 1, 아니라면 0의 값을 가짐
A_ScreenWidth주 모니터의 너비 (px)
A_ScreenHeight주 모니터의 높이 (px)

기타 내장 변수

내장 변수설명
A_Clipboard클립보드가 가진 텍스트 값 (=현재 복사되어있는 텍스트)
A_Space반각 공백 (=띄어쓰기)
A_Tab수평 탭 (=이스케이프된 문자열 `t와 동일)
true숫자 1과 동일
false숫자 0과 동일

아주 많은 내장 변수가 생략되어있지만, 그러한 내장 변수 중 쓸모있는 것은 관련된 내용을 배울 때 함께 설명드리겠습니다. 배우지 않은 함수와 관련된 내장 변수 같은 경우 아직은 설명할 수 없거든요.

⚠ 날짜와 시간과 관련된 내장 변수는 운영체제 설정을 따릅니다

따라서 사용자가 운영체제의 날짜 및 시간 설정을 변경한다면, 이런 내장 변수는 그에 맞는 변경된 값을 가집니다. 또한, A_MMMMA_MMMA_DDDDA_DDD는 사용자의 언어 설정에 따라 다른 값을 가집니다. 예를 들어서 A_MMMM은 국문 설정에서 7월이라는 값을 가지지만, 영문 설정에선 July라는 값을 가집니다.

실습

1. 내장 변수 사용

간단한 예제를 들어보겠습니다. 이번엔 현재 날짜와 시간을 담고 있는 변수인 A_Now를 써보겠습니다.

1MsgBox(A_Now)
예제 1. A_Now 변수의 사용

저는 20220727215502라고 출력되네요. 이는 2022년 07월 27일 21시 55분 02초를 나타냅니다. 이렇게 현재의 날짜와 시간을 출력할 수 있습니다.

A_Now처럼 모든 연/월/일/시/분/초를 한번에 쓰지 않고, 연/월/일/시/분/초가 따로 필요한 경우도 있습니다. 그럴땐 A_YYYYA_MMA_DDA_HourA_MinA_Sec 과 같이 각각을 의미하는 내장 변수도 존재하니 이를 사용하시면 됩니다. 이러한 자주 쓰는 내장 변수는 하단에 정리해드리겠습니다.

2. 변수와 변수, 변수와 문자열의 연결

여러 변수나 문자열을 합쳐서 하나의 인수로 적는 방법은 무엇일까요? 예를 들어서, 알림상자에 내장 변수와 문자열을 동시에 표시하게끔 말이에요. 즉, 아래처럼 출력하고 싶은 상황인거죠.

지금 시각은 (현재 시)시 (현재 분)분입니다.

방법은 간단합니다. 지금까지 배운대로 변수는 놔두고 문자열만 따옴표로 감싸주어 적어주면 됩니다. 단, 각각을 이을 때는 한 칸의 공백을 사이에 두어야합니다.

1MsgBox("지금 시각은 " A_Hour "시 " A_Min "분입니다.")
예제 2. 변수와 문자열을 연결시켜 하나의 인수로 사용 지금 시각은 18시 24분입니다 라고 적힌 알림 상자 사진 2. 출력 예시 (실행 시각에 따라 출력 결과가 다릅니다)

'예제 2'에서 따옴표로 감싸진 문자열 부분과, 감싸지지 않은 변수 부분이 한 칸씩 띄어져있는 것을 볼 수 있습니다. 변수와 문자열은 항상 공백으로 구분해줘야 한다는 것을 잊지 마세요!

[점검 문제] 위의 '예제 2'에서 인수는 몇 개를 전달해줬나요?

 

정답 펼치기/접기 1개입니다. 매개변수와 매개변수는 쉼표로 구분해 주었죠? '예제 2'에선 MsgBox의 Text 매개변수만 사용했으므로, 인수도 한 개만 전달해준 것입니다.

그 인수는 현재 시각에 따라 "지금 시각은 12시 40분입니다."와 같이 전달됩니다. 시간에 따라 전달되는 인수가 달라지는 것이죠!
질문하러 가기