AutoHotkey란

AutoHotkey(AHK)는 Windows 전용 키보드/마우스 자동화 도구다. 스크립트(.ahk 파일)를 작성하면 키보드 리맵(특정 키를 다른 키로 바꾸기), 단축키 등록, 반복 작업 자동화 등을 할 수 있다. 무료, 오픈소스.

설치

  1. https://www.autohotkey.com 에서 다운로드
  2. 설치 시 v1.1v2.0 중 선택 — 문법이 다르므로 주의
    • v1.1: 레거시. 기존 스크립트/예제가 대부분 v1 기준
    • v2.0: 최신. 문법이 더 깔끔하지만 v1과 호환 안 됨
  3. 설치 후 .ahk 파일을 더블클릭하면 실행됨 (화면 우측 하단 시스템 트레이에 초록색 H 아이콘이 뜨면 실행 중)

기본 사용법

핫키란

AHK의 핵심 개념은 핫키(hotkey)다. "이 키를 누르면 → 이 동작을 해라"를 정의하는 것.

트리거키::동작
트리거키::동작

:: 를 기준으로 왼쪽이 누를 키, 오른쪽이 실행할 동작이다.

Modifier(조합키)란

Modifier는 다른 키와 함께 눌러서 동작을 바꾸는 키를 말한다. Ctrl, Alt, Shift, Win이 대표적. 예를 들어 Ctrl+C에서 Ctrl이 modifier다.

AHK에서는 modifier를 기호로 축약한다:

기호 의미 예시
! Alt !F1 = Alt+F1
^ Ctrl ^c = Ctrl+C
+ Shift +Enter = Shift+Enter
# Win #e = Win+E
< 왼쪽 <! = 좌측 Alt
> 오른쪽 >^ = 우측 Ctrl

이 기호들을 조합해서 핫키를 만든다. 예:

; 좌측 Alt + ← 를 누르면 Home 키 입력
<!Left::SendInput, {Home}

; 좌측 Alt + → 를 누르면 End 키 입력
<!Right::SendInput, {End}
; 좌측 Alt + ← 를 누르면 Home 키 입력
<!Left::SendInput, {Home}

; 좌측 Alt + → 를 누르면 End 키 입력
<!Right::SendInput, {End}

읽는 법: <!Left = <(왼쪽) + !(Alt) + Left(←) → "좌측 Alt + 왼쪽 화살표"

SendInput, {Home}은 Home 키 입력을 보내라는 뜻. 중괄호 {}는 특수 키 이름을 감쌀 때 사용한다 ({Home}, {End}, {PgUp} 등).

핫키 동작 제어 접두사

modifier 기호 외에, 핫키의 동작 방식을 바꾸는 접두사도 있다:

접두사 의미 예시
~ 원래 키 기능도 함께 실행 ~LWin:: = Win 키 원래 기능 유지하면서 추가 동작
$ 자기 자신의 SendInput에 반응하지 않게 방지 $a::SendInput, b = 무한 루프 방지

스크립트 파일 구조

#SingleInstance Force    ; 같은 스크립트가 이미 실행 중이면 교체 (중복 방지)
#InstallKeybdHook       ; 좌/우 modifier를 구분하려면 필요 (<! vs >! 등)

; 좌측 Alt + ←/→ 로 Home/End 사용
<!Left::SendInput, {Home}
<!Right::SendInput, {End}
#SingleInstance Force    ; 같은 스크립트가 이미 실행 중이면 교체 (중복 방지)
#InstallKeybdHook       ; 좌/우 modifier를 구분하려면 필요 (<! vs >! 등)

; 좌측 Alt + ←/→ 로 Home/End 사용
<!Left::SendInput, {Home}
<!Right::SendInput, {End}
  • ; 뒤는 주석(실행 안 됨)
  • #으로 시작하는 줄은 스크립트 전체에 적용되는 설정(지시문)

자주 쓰는 명령어

명령어 설명
SendInput, {키} 키 입력 전송
Send {Blind}{키} modifier 상태 유지한 채 키 전송 (아래 설명 참조)
SetCapsLockState, AlwaysOff CapsLock 상태를 항상 꺼짐으로 고정
KeyWait, 키 해당 키가 떼질 때까지 대기
MsgBox, 텍스트 디버깅용 메시지 박스 팝업

Modifier 상태와 {Blind}

Modifier 상태란 키를 보내는 시점에 Ctrl, Alt, Shift, Win 키가 눌려 있는지 여부를 말한다.

기본적으로 SendInput은 modifier를 모두 뗀 상태에서 키를 전송한다. 예를 들어 Shift를 누른 채로 핫키가 발동해도, SendInput, {Home}은 Shift 없이 Home만 보낸다.

{Blind}를 붙이면 현재 눌린 modifier를 건드리지 않고 그대로 키를 보낸다. 예: Win 키를 누른 상태에서 Send {Blind}{vkE8}은 Win+vkE8으로 전송된다. [🔒 Internal Post] 스크립트가 이 원리를 이용한다.

시작프로그램 등록

.ahk 파일의 바로가기를 Windows 시작프로그램 폴더에 넣으면 부팅 시 자동 실행된다. PowerShell에서 바로가기를 만드는 방법:

$ws = New-Object -ComObject WScript.Shell
$shortcut = $ws.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\script-name.lnk")
$shortcut.TargetPath = "C:\path\to\script.ahk"
$shortcut.Save()
$ws = New-Object -ComObject WScript.Shell
$shortcut = $ws.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\script-name.lnk")
$shortcut.TargetPath = "C:\path\to\script.ahk"
$shortcut.Save()

또는 시작프로그램 폴더를 직접 열어서(Win+Rshell:startup) .ahk 파일의 바로가기를 수동으로 넣어도 된다.

한국어 키보드 주의사항

한국어 IME(입력기) 환경에서는 우측 Alt/Ctrl이 일반 modifier가 아닌 한/영, 한자 전환 전용키로 동작한다. Windows가 이 키들을 별도의 가상키코드(virtual key code — OS가 각 키를 식별하는 고유 번호)로 인식하기 때문에, AHK의 >!이나 >^ 접두사로는 잡을 수 없다:

물리 키 Windows 인식 AHK 접두사 가상키코드
우측 Alt 한/영 전환 >! 안 먹힘 vk15
우측 Ctrl 한자 변환 >^ 안 먹힘 vk19

따라서 >!Key>^Key 대신 가상키코드를 직접 사용해야 한다:

; 우측 Ctrl(한자키) + ↑ = PgUp
vk19 & Up::SendInput, {PgUp}
; 우측 Ctrl(한자키) + ↑ = PgUp
vk19 & Up::SendInput, {PgUp}

관련 문서