🔬 과학·테크/🔥 AutoHotkey v2 입문 가이드

AutoHotkey v2 입문 가이드 #10: 키 리매핑 - 키보드 재창조하기

_eNKI 2025. 12. 13. 19:47
반응형

🎯 이 글에서 배우는 것: 키 재배치, CapsLock 활용, 특수 리매핑 기법


🔄 리매핑이란?

키 리매핑 = 어떤 키를 다른 키로 바꾸기

예를 들어 CapsLock을 Ctrl로 바꾸면, CapsLock을 누를 때마다 Ctrl이 눌립니다!


📝 기본 리매핑

가장 간단한 형태

a::b  ; a를 누르면 b가 입력됨

실용 예제

; CapsLock을 Esc로 (Vim 유저 필수!)
CapsLock::Esc

; 오른쪽 Ctrl을 Enter로
RCtrl::Enter

; F1을 F2로
F1::F2

🔑 자주 쓰는 리매핑

CapsLock 활용 (가장 인기!)

CapsLock은 위치는 좋은데 거의 안 쓰는 키죠. 유용하게 바꿔봅시다:

; CapsLock → Ctrl (개발자 필수)
CapsLock::Ctrl

; CapsLock → Esc (Vim 사용자)
CapsLock::Esc

; CapsLock → Backspace (오타 수정용)
CapsLock::Backspace

그래도 CapsLock 기능이 필요하다면?

; Shift+CapsLock으로 원래 CapsLock 기능
+CapsLock::CapsLock

; CapsLock은 Ctrl로
CapsLock::Ctrl

⌨️ 수식키 리매핑

; 왼쪽 Alt와 왼쪽 Ctrl 교체
LAlt::LCtrl
LCtrl::LAlt

; 오른쪽 Alt를 Win키로
RAlt::RWin

주의사항

쌍방향 교체할 때 주의하세요:

; ⚠️ 이렇게 하면 무한 루프!
; a::b
; b::a

; ✅ 임시 키 사용 또는 특수 처리 필요
*a::Send("{Blind}{b}")
*b::Send("{Blind}{a}")

🎯 특정 프로그램에서만 리매핑

; 메모장에서만 F1을 저장(Ctrl+S)으로
#HotIf WinActive("ahk_exe notepad.exe")
F1::^s
#HotIf

; VS Code에서 Ctrl+; 를 Ctrl+/로 (주석 토글)
#HotIf WinActive("ahk_exe Code.exe")
^;::^/
#HotIf

🖱️ 마우스 버튼 리매핑

; 마우스 4번 버튼(뒤로)을 Ctrl+W(탭 닫기)로
XButton1::^w

; 마우스 5번 버튼(앞으로)을 Ctrl+T(새 탭)로
XButton2::^t

; 가운데 클릭을 더블클릭으로
MButton::Click 2

🔧 Blind 모드

다른 수식키 상태를 유지하면서 리매핑:

; Shift를 누른 상태에서도 제대로 작동
*CapsLock::Send("{Blind}{Ctrl down}")
*CapsLock up::Send("{Blind}{Ctrl up}")

Blind가 뭐죠?

{Blind}를 사용하면 현재 눌린 수식키(Ctrl, Alt, Shift)가 그대로 유지됩니다.

; Shift+CapsLock = Shift+Ctrl 효과
*CapsLock::Send("{Blind}{Ctrl}")

🎹 방향키 대체 (Vim 스타일)

CapsLock을 수식키로 사용해서 HJKL로 방향키 만들기:

; CapsLock + H/J/K/L = 방향키
#HotIf GetKeyState("CapsLock", "P")
h::Left
j::Down
k::Up
l::Right
#HotIf

; CapsLock 원래 기능 비활성화
CapsLock::return

더 완전한 버전

; CapsLock을 눌고 있을 때만 특수 기능
CapsLock & h::Send("{Left}")
CapsLock & j::Send("{Down}")
CapsLock & k::Send("{Up}")
CapsLock & l::Send("{Right}")

; CapsLock만 눌렀다 떼면 Esc
CapsLock::Send("{Esc}")

🔀 키 조합 리매핑

기본 조합

; Ctrl+;를 Ctrl+/로
^;::^/

; Win+A를 Alt+Tab으로
#a::!Tab

; Ctrl+Shift+V를 Ctrl+V로 (포맷 없이 붙여넣기)
^+v::^v

복잡한 조합

; Ctrl+Shift+C를 누르면 현재 줄 복사
^+c::{
    Send("{Home}")
    Send("+{End}")
    Send("^c")
}

🎮 게임용 리매핑

#HotIf WinActive("Game Title")  ; 게임 창에서만

; WASD를 화살표로 (에뮬레이터용)
w::Up
a::Left
s::Down
d::Right

; Space를 Z로 (점프→공격)
Space::z

#HotIf

📐 숫자패드 리매핑

; 숫자패드를 마우스로
Numpad4::MouseMove(-20, 0, , "R")
Numpad6::MouseMove(20, 0, , "R")
Numpad8::MouseMove(0, -20, , "R")
Numpad2::MouseMove(0, 20, , "R")
Numpad5::Click

🔄 일시적 리매핑

키를 누르고 있을 때만 다른 키로:

; Space를 누르고 있을 때 Shift 역할
Space::Shift

; 근데 이러면 Space 입력이 안 됨!

; 해결: 짧게 누르면 Space, 길게 누르면 Shift
Space::{
    KeyWait("Space", "T0.2")  ; 0.2초 대기
    if (ErrorLevel)  ; 아직 누르고 있으면
        Send("{Shift down}")
    else
        Send("{Space}")
    KeyWait("Space")
    Send("{Shift up}")
}

⚠️ 주의사항

1. 시스템 필수 키 주의

; ⚠️ 위험! 시스템 사용 불가해질 수 있음
;Ctrl::return   ; Ctrl 완전 비활성화
;Alt::return    ; Alt 완전 비활성화

2. 무한 루프 주의

; ⚠️ 무한 루프!
a::Send("a")  ; a 누르면 a 보내고, 그게 또 트리거...

; ✅ 해결 방법
$a::Send("a")  ; $ 접두사로 자신을 트리거하지 않음

3. 로그인 화면에서 작동 안 함

AHK 스크립트는 로그인 후에만 작동합니다. 시스템 레벨 리매핑은 레지스트리 수정이 필요합니다.


🌟 유용한 리매핑 모음

생산성 향상 팩

#Requires AutoHotkey v2.0

; CapsLock → Ctrl (타이핑 편의)
CapsLock::Ctrl
+CapsLock::CapsLock  ; Shift+CapsLock = 원래 CapsLock

; 오른쪽 Alt → 한/영 전환 (한글 키보드)
RAlt::Send("{vk15}")  ; 한/영 키

; Insert 키 비활성화 (실수 방지)
Insert::return

; Scroll Lock → 음소거
ScrollLock::Send("{Volume_Mute}")

; Pause → 미디어 재생/일시정지
Pause::Send("{Media_Play_Pause}")

노트북용 (F키 없는 키보드)

; CapsLock + 숫자 = F키
CapsLock & 1::F1
CapsLock & 2::F2
CapsLock & 3::F3
; ... 계속

🎮 실습 과제

  1. CapsLock을 Backspace로 리매핑
  2. 오른쪽 Shift를 Enter로 리매핑
  3. Ctrl+CapsLock은 원래 CapsLock 동작하도록
정답 보기 👀
#Requires AutoHotkey v2.0

; 1. CapsLock → Backspace
CapsLock::Backspace

; 2. 오른쪽 Shift → Enter
RShift::Enter

; 3. Ctrl+CapsLock → CapsLock 토글
^CapsLock::CapsLock

📚 다음 시간 예고

다음 글에서는 GUI 기초를 배웁니다:

  • 윈도우 창 만들기
  • 버튼, 텍스트 입력
  • 이벤트 처리

나만의 프로그램을 만들어봅시다! 🪟


🔑 오늘 배운 핵심 정리

문법 용도 예제
a::b 키 리매핑 CapsLock::Ctrl
$ 자기 트리거 방지 $a::...
* 수식키 무시 *CapsLock::...
{Blind} 수식키 유지 Send("{Blind}{Ctrl}")
& 키 조합 CapsLock & h::Left
#HotIf 조건부 리매핑 특정 프로그램에서만

이전 글: [#9 함수 기초]
다음 글: [#11 GUI 기초]

반응형