본문 바로가기

4.개발 및 운영 환경

Windows에서 한영키, Ctrl키 리매핑하기

키 매핑 방법

Windows에서 다양한 키 매핑을 변경하는 방법입니다.

예를 들어,

  • 한영키를 shift+space 사용하기
  • CapsLock키를 Ctrl로 사용하기

인터넷에서 검색해보면 다 나오는 내용입니다. 대부분의 Windows에서 잘 될것이라고 생각합니다.

키를 변경하기 위해서는 아래 레지스트리를 수정해야 합니다.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]

그 위치에 "Scancode Map"키에 이진 값을 입력해야 합니다.

"Scancode Map"=hex:\
00,00,00,00,\
00,00,00,00,\
03,00,00,00,\
1d,00,3a,00,\
3a,00,46,00,\
00,00,00,00 

위에서 16진수 4개로된 숫자의 연속이다. 위의 예제에서 총 6개의 숫자로 구성되었다. "00,00,00,00"이 한개의 숫자로 4 바이트로된 정수형이다. 이 값은 리틀 엔디언으로 저장되었다. 예를 들어 "03, 00"은 실제 값은 0x0003으로 숫자로는 3이 된다.

"Scancode Map"에서 각 자리에 숫자마다 의미가 있다. 그 의미는 다음과 같다.

"Scancode Map"=hex:\
00,00,00,00,\  <-- 헤더
00,00,00,00,\  <-- 버전
03,00,00,00,\  <-- 다음에 오는 라인수(3개)
1d,00,3a,00,\  <-- 라인1
3a,00,46,00,\  <-- 라인2
00,00,00,00    <-- 라인3

다음에 오는 라인수 다음에 오는 값에 의해서 키 매핑이 변경이된다. 앞의 예제에서 라인1을 살펴보자.

"1d,00,3a,00"은 0x001d와 0x003a 값으로 되어 있다. 각 값은 키값을 의미하며 앞에서 부터 LeftCtrl 키와 CapsLock키를 의미한다. 이 값의 의미는 Ctrl키를 CapsLock키에 매핑한다는 것이다. 즉, CapsLock키를 누르면 Ctrl키가 입력이된다.

대표적인 키값은 아래와 같다. 더 자세한 키값은 https://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html 를 참조하면 된다.

0x003a - Capslock
0x001d - LCtrl
0x0038 - LWin
0xe038 - RAlt
0xe05c - RWin
0xe05d - Popup
0x0072 - HanEng
0x0071 - Hanja
0x0046 - ScrLk

이런 방법으로 다른 키도 매핑할 수 있다. 중요한 것은 여러 키를 매핑하려면 여러 번 매핑 값을 적용하는 것이 아니라, 매핑 키 값들은 한번에 입력해야한다.

몇가지 매핑 예제를 살펴보겠다. 아래 예제를 한꺼번에 적용하고 싶다면, 하나로 만들어서 적용해야한다. 이것 때문에 앞의 키매핑 구조를 살펴본 것이다.

레지스트리를 변경하고 반드시 재부팅해야 한다.

Ctrl키 매핑 예제

레지스트리 파일:

ctrl_key.reg
다운로드

다음은 Ctrl키를 CapsLock키에 매핑하고 CapsLock키는 ScrLock키로 매핑하는 예제이다. 간혹 CapsLock를 사용할 경우가 있어서 거의 사용하지 않은 ScrLock키로 매핑한 것이다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:\
00,00,00,00,\
00,00,00,00,\
03,00,00,00,\
1d,00,3a,00,\
3a,00,46,00,\
00,00,00,00 

한영키 매핑 예제1

레지스트리 파일:

han_eng_key.reg
다운로드

한영키 전환을 shift+space을 사용하는 레지스트리 키입니다. 이를 위해서 기존 키보드 드라이버도 수정이 필요하다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]
"PollingIterations"=dword:00002ee0
"PollingIterationsMaximum"=dword:00002ee0
"ResendIterations"=dword:00000003
"LayerDriver JPN"="kbd101.dll"
"LayerDriver KOR"="kbd101c.dll"
"OverrideKeyboardType"=dword:00000008
"OverrideKeyboardSubtype"=dword:00000005
"OverrideKeyboardIdentifier"="kbd101c.dll"
"KeyboardFailedReset"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,\
                   00,00,00,00,\ 
                   03,00,00,00,\
                   72,00,38,E0,\ 
                   71,00,1D,E0,\
                   00,00,00,00

한영키 매핑 예제2

레지스트리 파일:

han_eng_key2.reg
0.00MB

한영키 전환을 CapsLock 키을 사용하는 레지스트리 키입니다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,\
                   00,00,00,00,\ 
                   03,00,00,00,\
                   72,00,3A,00,\ 
                   00,00,00,00,\
                   00,00,00,00

매핑키 해제

레지스크리 파일:

reset_key.reg
다운로드

이는 앞의 설정했던 키 매핑을 해제하는 예제이다. 이 값을 적용하면 앞의 적용되었던 키매핑을 초기화해준다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=-
반응형