외부 핫키 덮어쓰기 또는 비활성화

외부 핫키 덮어쓰기 또는 비활성화 (Overriding or Disabling External Hotkeys)

다른 응용 프로그램이나 Windows 자체가 소유한 핫키를 AutoHotkey 스크립트로 덮어쓰거나 비활성화하는 방법을 설명하는 문서예요.

출처: 문서

본문

Win+L과 Win+U를 제외한 모든 내장 Windows 핫키를 비활성화하려면, 레지스트리를 다음과 같이 변경해요 (모든 OS에서 동작하지만 아마 재부팅이 필요할 거예요):

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
NoWinKeys REG_DWORD 0x00000001 (1)

하지만 모두 비활성화하는 것 이상을 원한다면 계속 읽어 보세요.

다른 응용 프로그램이 소유한 핫키는 스크립트에서 어떤 동작에 할당하기만 하면 덮어쓰거나 비활성화할 수 있어요. 이 기능의 가장 흔한 용도는 Windows 자체에 내장된 핫키를 바꾸는 것이에요. 예를 들어, Win+E(Windows Explorer를 실행하는 바로 가기 키)가 다른 동작을 수행하길 원한다면 다음과 같이 사용해요:

#e::MsgBox "This hotkey is now owned by the script."

다음 예시에서는 RUN 창을 여는 데 사용되는 Win+R 핫키를 완전히 비활성화해요:

#r::return

마찬가지로, 양쪽 Win 키를 모두 비활성화하려면 다음과 같이 해요:

LWin::return
RWin::return

응용 프로그램의 비전역(non-global) 핫키(즉, 해당 응용 프로그램이 활성 창일 때만 동작하는 단축 키)를 비활성화하거나 바꾸려면, 다음 예시를 살펴보세요. 이 예시는 Ctrl+P(인쇄)를 메모장(Notepad)에서만 비활성화하고, 다른 모든 종류의 창에서는 그 키가 계속 동작하도록 해요:

$^p::
{
	if WinActive("ahk_class Notepad")
		return  *; 즉 아무것도 하지 않음. 그래서 Ctrl+P가 메모장에서는 아무것도 하지 않게 됨.*
	Send "^p"
}

위 예시에서 $ 접두사가 필요한 이유는, 핫키가 자기 자신을 활성화하지 않고(그렇지 않으면 무한 루프에 대한 경고 대화 상자가 나타나요) "스스로 보낼(send itself)" 수 있게 하기 위해서예요. 또한 참고: Context-sensitive Hotkeys(문맥에 민감한 핫키).

위 예시들 중 어느 것이든 "Override.ahk" 같은 새 텍스트 파일에 복사한 다음 파일을 실행해서 시험해 볼 수 있어요. 또는 브라우저가 지원한다면, 코드 블록 위에 마우스를 올렸을 때 오른쪽 위에 나타나는 ↓ 버튼을 클릭해서 그중 하나를 스크립트 파일로 다운로드할 수 있어요.

더 알아보기 (Learn more)