AutoHotkey 스크립트를 작성하는 방법

오토핫키는 놀라운 기능을 제공하지만, 다소 복잡한 소프트웨어입니다. 초기에는 사용자가 단축키를 재정의하여 특정 작업을 수행하도록 고안되었지만, 현재는 Windows 자동화를 위한 포괄적인 도구 모음으로 발전했습니다.

AHK는 기본적인 개념이 비교적 간단하여 초보 사용자도 쉽게 배울 수 있지만, 튜링 완전한 프로그래밍 언어이기도 합니다. 프로그래밍 경험이 있거나 관련 개념에 익숙하다면 구문 학습이 훨씬 수월할 것입니다.

오토핫키 설치 및 사용법

AutoHotkey의 설치 과정은 매우 간단합니다. 공식 웹사이트에서 설치 프로그램을 다운로드하여 실행한 후 “빠른 설치” 옵션을 선택하세요. 설치가 완료되면, 아무 곳이나 마우스 오른쪽 버튼으로 클릭하고 “새로 만들기 > AutoHotkey 스크립트”를 선택하여 새 스크립트를 생성할 수 있습니다.

AHK 스크립트는 확장자가 .ahk인 텍스트 파일입니다. 마우스 오른쪽 버튼을 클릭하면 다음과 같은 몇 가지 옵션이 나타납니다.

“스크립트 실행”은 AHK 런타임을 사용하여 스크립트를 실행합니다.
“Compile Script”는 AHK 실행 파일과 함께 번들로 제공되어 실행 가능한 EXE 파일을 생성합니다.
“스크립트 편집”은 기본 텍스트 편집기에서 스크립트를 엽니다. AHK 스크립트 작성 시 메모장을 사용할 수도 있지만, 구문 강조 및 디버깅 기능을 지원하는 SciTE4AutoHotkey 편집기를 사용하는 것이 좋습니다.

스크립트가 실행 중일 때(EXE 파일이든 아니든) Windows 알림 영역, 즉 시스템 트레이에서 스크립트가 백그라운드로 실행 중임을 확인할 수 있습니다. “H” 모양의 녹색 아이콘을 찾아보세요.

스크립트를 종료하거나 일시 중지, 다시 로드 또는 편집하려면 알림 아이콘을 마우스 오른쪽 버튼으로 클릭하고 원하는 옵션을 선택하세요. 스크립트는 사용자가 종료할 때까지 백그라운드에서 계속 실행됩니다. 물론, Windows에서 로그아웃하거나 PC를 재부팅하면 스크립트는 사라집니다.

AutoHotkey 작동 원리

AHK의 핵심은 특정 작업을 단축키에 연결하는 것입니다. 다양한 동작, 단축키 조합 및 제어 구조를 사용할 수 있지만 모든 스크립트는 동일한 원칙에 따라 작동합니다. 아래는 Windows 키 + C를 누를 때마다 Chrome을 실행하는 기본적인 AHK 스크립트입니다.

#c::
Run Chrome
return

첫 번째 줄은 단축키를 정의합니다. 여기서 #은 Windows 키를 나타내고 c는 키보드의 C 키를 의미합니다. 그 뒤에 나오는 ::는 작업 블록의 시작을 표시합니다.

다음 줄은 실행할 작업을 나타냅니다. 이 경우에는 ‘Run’ 명령을 사용하여 특정 응용 프로그램을 실행합니다. 블록은 ‘return’으로 마무리됩니다. ‘return’ 전에 여러 작업을 수행할 수 있으며, 이러한 작업은 순차적으로 실행됩니다.

이처럼 간단한 ‘키 입력 – 동작 연결’을 정의할 수 있으며, 이러한 연결을 .ahk 파일에 얼마든지 추가하여 백그라운드에서 실행되도록 설정할 수 있습니다. AHK는 항상 지정된 단축키를 감지하여 해당 동작을 수행합니다.

단축키 및 수정자

AHK에서 사용 가능한 수정자 키의 전체 목록은 공식 문서에서 확인할 수 있지만, 여기서는 가장 유용하고 흥미로운 기능에 초점을 맞추겠습니다.

수정자 키는 모두 고유한 단일 문자 약어를 가지고 있습니다. 예를 들어, #, !, ^, +는 각각 Windows, Alt, Control, Shift 키를 의미합니다. 또한 왼쪽 Alt, Control, Shift와 오른쪽 Alt, Control, Shift를 구분하여 더 많은 단축키를 설정할 수 있습니다. 예를 들어, +는 오른쪽 Shift 키를 나타냅니다. 사용 가능한 모든 키 목록은 키 목록에서 확인할 수 있습니다. (참고: 거의 모든 키를 참조할 수 있으며, 키보드 외에 다른 입력 장치도 사용할 수 있습니다. 관련 확장 기능을 통해).

단축키에 원하는 만큼 많은 키를 조합할 수 있지만, 조합할 수 있는 키의 수는 한계가 있습니다. 이때 더 복잡한 조합을 가능하게 해주는 수정자가 유용합니다. 예를 들어, AHK 문서에서 다음 예시를 살펴보겠습니다.

녹색으로 표시된 #IfWinActive는 지시어(directive)라고 하며, 스크립트에서 해당 지시어 아래에 위치한 핫키에 추가적인 컨텍스트를 적용합니다. 즉, 이 지시어 이후에 정의된 핫키는 지정된 조건이 참일 때만 실행됩니다. 하나의 지시어 아래에 여러 핫키를 그룹화할 수도 있습니다. 지시어는 다른 지시어가 나타날 때까지 유효하며, 빈 #If 지시어를 사용하여 재설정할 수 있습니다.

위의 예시에서 지시어는 ‘ahk_class 메모장’으로 지정된 특정 창이 열려 있는지 확인하는 역할을 합니다. AHK가 “Win + C” 입력을 감지하면, 지시어가 참으로 평가될 때만 첫 번째 #IfWinActive 아래의 동작을 수행하고, 그렇지 않으면 두 번째 #IfWinActive 아래의 동작을 확인합니다. AHK에는 다양한 지시어가 있으며, 모든 지시어는 문서에서 확인할 수 있습니다.

AutoHotkey는 핫스트링 기능도 제공합니다. 핫스트링은 텍스트 전체 문자열을 다른 문자열로 바꾸는 기능을 제공하며, 핫키와 유사하게 작동합니다. 이 기능은 자동 고침과 유사하며, AHK용 자동 고침 스크립트를 사용할 수 있습니다. 핫스트링은 모든 AHK 동작을 지원합니다.

핫스트링은 입력된 문자열이 정확하게 일치하는 경우에만 작동합니다. 이 동작은 조정할 수 있지만, 핫스트링을 대체하기 위해 일치하는 텍스트는 자동으로 제거됩니다.

동작 (Actions)

AHK의 ‘동작’이란 운영 체제에 외부적인 영향을 미치는 모든 것을 의미합니다. AHK에는 다양한 동작이 존재하며, 여기서는 몇 가지 유용한 동작만을 간략히 소개하겠습니다.

입력 보내기: 텍스트 또는 다양한 버튼 누름을 시뮬레이션합니다.
마우스 이동: 마우스를 원하는 위치로 이동시킵니다. AHK는 때때로 비디오 게임용 치트 소프트웨어로 오해받기도 하는데, 이는 AHK를 사용하여 완전한 에임봇을 만든 사례 때문입니다.
마우스 클릭: 현재 창을 기준으로 특정 위치를 클릭합니다.
대화 상자 메뉴 표시: 양식 및 입력 필드가 있는 대화 상자를 표시합니다.
창 이동, 크기 조정, 개폐: 창을 제어합니다.
사운드 재생: 특정 사운드를 재생합니다.
Windows 레지스트리에 쓰기: Windows 레지스트리 값을 변경합니다.
클립보드 내용 수정: 클립보드의 내용을 변경합니다.
파일 읽기 및 쓰기: 파일을 읽고 쓸 수 있으며, 파일의 각 줄에 대해 작업을 수행할 수도 있습니다. AHK는 .ahk 파일에 쓸 수도 있고, 자체 코드를 변경할 수도 있습니다.

이러한 동작 외에도 다양한 관련 명령을 사용할 수 있습니다. 예를 들어, 클립보드에 내용을 쓸 수 있을 뿐만 아니라, 클립보드의 내용을 가져와 변수에 저장하거나 클립보드가 변경될 때 특정 함수를 실행할 수도 있습니다.

제어 구조를 통한 통합

AHK는 제어 구조가 없었다면 튜링 완전한 언어가 될 수 없었을 것입니다. AHK는 다양한 제어 구조를 제공하며, 이로 인해 복잡한 자동화 스크립트 개발이 가능합니다.

#If 지시어 외에도, 액션 블록 내부에서 If 조건문을 사용할 수 있습니다. AHK는 For 루프, 중괄호 블록, Try 및 Catch 문 등 다양한 제어 구조를 제공합니다. 또한 액션 블록 내에서 외부 데이터에 접근하여 변수 또는 객체에 저장하고 나중에 사용할 수 있습니다. 사용자 정의 함수라벨도 정의할 수 있습니다. AHK에서는 다른 프로그래밍 언어에서 할 수 있는 대부분의 작업을 약간의 노력과 문서를 참고하여 구현할 수 있습니다.

예를 들어, 여러 버튼을 연속적으로 클릭하고 서버 응답을 기다려야 하는 지루하고 반복적인 작업이 있다고 가정해 봅시다. AHK를 사용하면 이러한 작업을 자동화할 수 있습니다. 마우스를 특정 위치로 이동하여 클릭하고, 다음 지점으로 이동하여 다시 클릭하는 루프를 정의할 수 있습니다. 또한, 중단 없이 실행되도록 몇 가지 대기 시간(wait)을 설정할 수도 있습니다. 심지어 화면의 픽셀 색상을 읽어 무슨 일이 일어나는지 확인하는 기능도 사용할 수 있습니다.

분명한 것은, 스크립트가 아름답지는 않을 수도 있지만, AutoHotkey 자체도 마찬가지입니다. 이것은 전혀 문제가 되지 않습니다.