핫키 작성 방법

핫키 작성 방법 (How to Write Hotkeys)

AutoHotkey에서 핫키(hotkey)를 정의하고, 수식 키와 문맥에 민감한 핫키를 사용하는 방법을 설명하는 문서예요.

출처: 문서

본문

핫키는 동작을 트리거하는 키 또는 키 조합이에요. 예를 들어, Win+E는 보통 파일 탐색기를 실행하고, F1은 종종 응용 프로그램별 도움말 기능을 활성화해요. AutoHotkey는 어떤 곳에서든 또는 특정 응용 프로그램 안에서만 사용할 수 있는 핫키를 정의하고, 여러분이 코드로 표현할 수 있는 어떤 동작이든 수행할 힘을 가지고 있어요.

핫키를 정의하는 가장 일반적인 방법은 핫키 이름 뒤에 이중 콜론을 쓰고 그다음 동작을 쓰는 것이에요:

#n::Run "notepad"

이 예시는 Win+N을 누를 때마다 메모장(Notepad)을 실행하는 핫키를 정의해요. 시험해 보는 방법을 배우려면 How to Run Example Code를 참조해요.

프로그램 실행에 대한 자세한 내용은 How to Run Programs를 참조해요.

여러 줄이 필요하면 중괄호를 사용해 핫키 동작의 시작과 끝을 표시해요. 이것을 블록(block)이라고 불러요.

#n::
{
    if WinExist("ahk_class Notepad")
        WinActivate  *; 위에서 찾은 창을 활성화함*
    else
        Run "notepad"  *; 새 메모장 창을 엶*
}

여는 중괄호는 핫키와 같은 줄, :: 뒤에 쓸 수도 있어요.

이중 콜론 핫키 뒤의 블록은 암시적으로 함수의 본문이지만, 그것은 자신만의 변수를 정의할 때만 중요해요. 지금은 블록이 여러 줄을 단일 동작 또는 *문장(statement)*으로 묶는 데 사용된다는 것만 알면 돼요 (Control Flow를 참조하면 이것에 대해 더 알 수 있어요).

기본 핫키 (Basic Hotkeys)

대부분의 핫키에서 핫키 이름은 선택적인 수식(modifier) 기호들 뒤에 단일 문자나 기호, 또는 키 이름이 이어지는 형태예요. 위 예시에 다음과 같은 변경을 시도해 보세요:

  • #를 빼면 N을 단독으로 누를 때마다 핫키가 활성화돼요. 문제가 생기면 언제든 스크립트를 종료할 수 있다는 점을 명심하세요.
  • #를 Ctrl용 ^, Alt용 !, Shift용 +로 바꾸거나 조합을 시도해 보세요.
  • #<^로 바꾸면 왼쪽 Ctrl 키를 누를 때만, >^로 바꾸면 오른쪽 Ctrl 키를 누를 때만, 둘 다 사용하면 두 키를 모두 요구하게 돼요.
  • n을 다른 문자나 기호(: 제외)로 바꿔 보세요.
  • n을 키 목록의 어떤 이름으로든 바꿔 보세요.

참고: :: 바로 앞의 마지막 문자는 수식 기호로 해석되지 않아요.

이 형태의 핫키에서는 조합의 마지막 키만 단일 문자로 문자 그대로 쓰거나 이름을 온전히 적을 수 있어요. 예를 들어:

  • #::는 해시(#) 키, 또는 그 기호와 연관된 어떤 조합으로든(미국 자판에서는 Shift+3) 활성화되는 핫키를 만들 거예요.
  • ##::는 위와 비슷하지만 Windows 키도 함께 누르고 있을 때만 활성화되는 핫키를 만들 거예요.
  • LWin::는 다른 수식 키 없이 왼쪽 Windows 키를 눌렀을 때 활성화되는 핫키를 만들 거예요.

가장 흔한 수식 키는 Ctrl(^), Alt(!), Shift(+) 및 Win(#)이에요.

<> 기호는 위 네 가지 수식 키 중 어느 것에든 접두사로 붙여서 그 키의 왼쪽 또는 오른쪽 변형을 지정할 수 있어요. 수식 조합 <^>!은 AltGr 키(키보드 자판에 있다면)에 해당하는데, 운영 체제가 그것을 LCtrl과 RAlt의 조합으로 구현하기 때문이에요.

다른 수식 키들은 다음과 같아요:

  • * (와일드카드) 핫키가 포함하지 않는 기호의 수식 키를 누르고 있어도 핫키가 발화되게 해줘요.
  • ~ (억제 없음, no-suppress) 핫키가 키의 네이티브 기능을 차단하지 못하게 해요.
  • $ (훅 사용, use hook) 키를 보낼 때 의도하지 않은 루프를 방지하고, 어떤 경우에는 핫키를 더 안정적으로 만들어요.

키를 눌렀을 때가 아니라 놓았을 때만 핫키가 발화되게 하려면 UP 접미사를 사용해요.

관련: Hotkey Modifier Symbols(핫키 수식 기호), List of Keys(키 목록)

문맥에 민감한 핫키 (Context-sensitive Hotkeys)

#HotIf 지시문은 핫키가 활성화되기 위해 충족되어야 하는 조건을 지정하는 데 사용될 수 있어요. 예를 들어:

  • 핫키를 누를 때 특정 응용 프로그램의 창이 활성 상태라면.
  • 핫키를 누를 때 CapsLock이 켜져 있다면.
  • 코드로 감지할 수 있는 어떤 다른 조건이든.

예를 들어:

#HotIf WinActive("ahk_class Notepad")
^a::MsgBox "You pressed Ctrl-A while Notepad is active. Pressing Ctrl-A in any other window will pass the Ctrl-A keystroke to that window."
#c::MsgBox "You pressed Win-C while Notepad is active."

#HotIf
#c::MsgBox "You pressed Win-C while any window except Notepad is active."

핫키를 누를 때마다 평가되는 표현식을 써서 조건을 정의해요. 표현식이 참으로 평가되면 핫키의 동작이 실행돼요.

같은 핫키는 각 발생(발생당 하나의 핫키 변형(variant))마다 다른 조건을 지정해서 여러 번 사용할 수 있어요. 핫키를 누르면 프로그램은 조건이 충족되는 첫 번째 핫키 변형, 또는 조건이 없는 것(위 예시의 마지막 #c:: 같은)을 실행해요.

핫키의 조건이 충족되지 않고 핫키에 무조건 변형이 없으면, 마치 핫키가 애초에 정의되지 않은 것처럼 키 입력이 활성 창에 전달돼요. 예를 들어, 위 예시를 실행하는 동안 메모장이 활성 상태가 아니면, Ctrl+A는 정상 기능(아마 모두 선택)을 수행할 거예요.

예시에 다음과 같은 변경을 시도해 보세요:

  • WinActiveWinExist로 바꾸면 메모장이 포커스를 가지지 않아도 실행 중이기만 하면 핫키가 활성화돼요.
  • 조건을 GetKeyState("CapsLock", "T")로 바꾸면 CapsLock이 켜져 있는 동안에만 핫키가 활성화돼요.
  • 웹 브라우저나 편집기 같은 다른 창에 다른 ^a 또는 #c 핫키를 추가해 보세요. 예시가 비영어 시스템에서도 동작하도록 ahk_class를 사용하지만, 원한다면 제거하고 창 제목을 사용할 수 있어요.

핫키가 영향을 주길 원하는 창을 정확히 식별하려면 때로는 창 제목 외의 기준을 사용해야 해요. 더 자세한 내용은 How to Manage Windows를 참조해요.

관련: #HotIf, Expressions(표현식), WinActive

사용자 정의 조합 (Custom Combinations)

*사용자 정의 조합(custom combination)*은 보통 조합으로 쓰지 않을 두 키를 결합하는 핫키예요. 예를 들어, Numpad0 & Numpad1::은 Numpad0을 누른 채 Numpad1을 누르면 활성화되는 핫키를 정의해요.

사용자 정의 조합에서 키를 접두사로 사용할 때, AutoHotkey는 수식 키로 쓰는 데 방해가 되므로 그 키의 정상 기능이 활성화되길 원하지 않는다고 가정해요. 키의 정상 기능을 복원하는 방법은 두 가지가 있어요:

  1. Numpad0::Send "{Numpad0}" 같은 다른 핫키를 사용해 키의 원래 기능을 재현해요. 기본적으로 그 핫키는 Numpad0을 놓을 때만, 그리고 Numpad0과 Numpad1을 조합으로 누르지 않았을 때만 활성화돼요.
  2. ~Numpad0 & Numpad1::처럼 조합에 물결표(~)를 접두사로 붙여요. 이것은 AutoHotkey가 Numpad0의 정상 기능을 억제하지 못하게 해요. 단, Numpad0::도 정의한 경우에는 물결표 덕분에 Numpad0을 놓을 때가 아니라 즉시 후자의 핫키가 활성화돼요.

참고: 사용자 정의 조합은 정확히 두 개의 키/마우스 버튼의 조합만 지원하며, Alt, Win, Ctrl, Shift용 !#^+ 같은 다른 수식 키와 결합할 수 없어요.

AutoHotkey가 두 개보다 많은 키의 사용자 정의 조합을 직접 지원하지는 않지만, #HotIf를 사용해 비슷한 최종 결과를 얻을 수 있어요. 아래 예시를 실행하면 Ctrl+CapsLock+Space 또는 Ctrl+Space+CapsLock을 누르면 메시지가 표시돼야 해요:

#HotIf GetKeyState("Ctrl")
Space & CapsLock::
CapsLock & Space::MsgBox "Success!"

이 예시에서는 Ctrl을 먼저 누르는 것이 필요해요. 이것은 Ctrl을 누르고 있지 않으면 Space와 CapsLock이 정상 기능을 수행한다는 장점이 있어요.

관련: Custom Combinations(사용자 정의 조합)

그 밖의 기능 (Other Features)

AutoHotkey의 핫키에는 탐구해 볼 가치가 있는 다른 기능들이 있어요. 대부분의 응용 프로그램은 Ctrl, Alt, Shift, 때로는 Win을 다른 하나의 키와 조합하는 것으로 제한되고(그리고 키보드의 모든 키가 지원되지 않는 경우가 많아요) AutoHotkey는 그렇게 제한되지 않아요. 더 읽으려면 Hotkeys를 참조해요.

더 알아보기 (Learn more)