지식 정리

windows 키보드 리매핑 (키 위치 바꾸기, 별도의 프로그램 x, 스캔코드 맵, 예시 Esc와 Caps Lock 맞바꿈)

Unagi_zoso 2022. 4. 28. 15:18

저는 vim 같은 에디터를 다루며 Capslock 보다는 Capslock의 위치에 차라리 Esc가 있는 편이

더 능률에 좋을 것 같아 그렇게 사용 중입니다.

그러기 위해 오늘 알아볼 방법은 스캔코드 맵이라고 합니다.

스캔코드와 스캔코드 맵의 간단한 정리

먼저 스캔코드는 키보드가 눌려질 때떼어질 때 운영체제로 보내는 신호입니다.

이 방식은 키보드에서 운영체제로 넘어오는 입력 정보들을 그대로 받아들이기 전

미리 작성해둔 스캔코드맵 을 읽어 우리가 정의한 스캔코드맵맞게 동작하는 것입니다.

본격적인 작업

오늘의 예시는 Esc와 Caps Lock 맞바꿈입니다.

Capslcok -> Esc

Esc -> Capslock

우선 윈도우 검색창에 레지스트리 편집기를 검색하고 실행해봅시다.

이후

왼쪽에서 컴퓨터 하위 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 디렉터리를 찾아 들어갑시다.

이 때 Control의 하위에 Keyboard Layout 과 Keyboard Layouts 가 있으니 잘 보고 선택합시다.

우리가 찾아야 하는 것은 Layout 입니다!

여기까지 했다면

오른쪽 화면이 별도의 파일이 없거나 (기본값) 파일 하나 정도가 있을 것입니다.

저는 이미 Scancode Map을 적용하여 사용 중이기에 Scancode Map 파일이 존재합니다.

이제 Scancode Map 파일을 만들기 위해 오른쪽 화면에서 오른쪽 클릭을 통해 이진값 파일을 만듭시다.

본격적인 Scancode Map 작성에 앞서 설명을 하겠습니다.

(이 글을 읽으시는 분 중 단순 Esc와 Capslcok을 바꾸고 싶으신 경우라면

그냥 제가 작성한 Scancode Map을 따라 작성하시면 됩니다.)

빨간색의 선 위의 00 00 00 00 00 00 00 00에 대해 알아봅시다.

스킨코드맵에서의 데이터들은 00 00 00 00 이렇게 네 자리가 한 단위를 이룹니다.

초기화를 위한 정보로 각 각에 헤드의 버전과 헤드의 플라그가 들어갑니다.

우리가 원하는 작업과는 큰 관계없으니 리매핑을 위해서라면

항상 00 00 00 00 00 00 00 00을 적읍시다.

노란색 선의 위의 수들이 우리가 본격적으로 작업할 내용인데 앞쪽의 03 00 00 00작업의 횟수라고 보면 됩니다.

값을 두 개 변경하는데 어째서 02 00 00 00이 아니라 03 이냐 할 수 있는데 이는 초록색 선과 관계되어있습니다.

초록색 선의 작업이 필요하기에 우리가 원하는 작업에 하나의 작업을 더 해 3이 된 것입니다.

2(우리가 원하는 작업의 수) + 1(필수적인 작업) = 3

그리고 뒤에 나오는 노란색 선 01 00 3A 00과 3A 00 01 00 이 두 데이터를 통해 우리는

Esc와 Capslock을 맞바꿉니다. (Capslock 과 Esc 뿐만 아니라 다른 키맵들도 정리하여 올릴 테니 적용하면 됩니다.)

초록색 선의 00 00 00 00작업의 종료를 위한 Null 값으로 이 또한 빨간색 선과 같게 꼭 필요한 부분이니

00 00 00 00으로 적으면 됩니다.

여기까지 작성이 완료되었다면 파일을 저장하고 컴퓨터를 재부팅하여

새로 바뀐 키가 잘 작동하는지 확인합시다.

본문에서는 다루지 않았지만 아래 스캔코드 리스트를 보면

PrintScreen의 경우 스캔코드가 E0 A2인데

이를 스캔코드 맵 상에서는 A2 E0의 순서로 적어야 합니다.

이는 컴퓨터가 어떤 아키텍쳐인지에 따라 다를 수 있는데

x86 이상 아키텍쳐의 경우 A2 E0같이 순서를 바꿔주면 됩니다..

[Scancode list]

키 이름 스캔 코드 (Hex) 키 이름 스캔 코드 (Hex) 키 이름 스캔 코드 (Hex)
Esc 0x01 Q 0x10 A 0x1E
숫자 1 0x02 W 0x11 S 0x1F
숫자 2 0x03 E 0x12 D 0x20
숫자 3 0x04 R 0x13 F 0x21
숫자 4 0x05 T 0x14 G 0x22
숫자 5 0x06 Y 0x15 H 0x23
숫자 6 0x07 U 0x16 J 0x24
숫자 7 0x08 I 0x17 K 0x25
숫자 8 0x09 O 0x18 L 0x26
숫자 9 0x0A P 0x19 세미콜론 (;) 0x27
숫자 0 0x0B 대괄호 열기 ([) 0x1A 작은 따옴표 (') 0x28
백스페이스 (Backspace) 0x0E 대괄호 닫기 (]) 0x1B 왼쪽 Shift 0x2A
탭 (Tab) 0x0F 엔터 (Enter) 0x1C 백슬래시 (\) 0x2B
Caps Lock 0x3A 한/영 키 0xE0F1 Pause/Break 0xE11D45
왼쪽 Ctrl 0x1D 오른쪽 Ctrl 0xE01D 오른쪽 Alt (AltGr) 0xE038
왼쪽 Alt 0x38 스페이스바 0x39 오른쪽 Shift 0x36
Insert 0xE052 Home 0xE047 Page Up 0xE049
Delete 0xE053 End 0xE04F Page Down 0xE051
방향키 ↑ 0xE048 방향키 ↓ 0xE050 방향키 ← 0xE04B
방향키 → 0xE04D 숫자 패드 0 0x52 숫자 패드 1 0x4F
숫자 패드 2 0x50 숫자 패드 3 0x51 숫자 패드 4 0x4B
숫자 패드 5 0x4C 숫자 패드 6 0x4D 숫자 패드 7 0x47
숫자 패드 8 0x48 숫자 패드 9 0x49 숫자 패드 점 (.) 0x53
숫자 패드 + 0x4E 숫자 패드 - 0x4A Scroll Lock 0x46
윈도우 키 (왼쪽) 0xE05B 윈도우 키 (오른쪽) 0xE05C 메뉴 키 0xE05D
F1 0x3B F2 0x3C F3 0x3D
F4 0x3E F5 0x3F F6 0x40
F7 0x41 F8 0x42 F9 0x43
F10 0x44 F11 0x57 F12 0x58
Print Screen 0xE037 Num Lock 0x45 Alt+Print Screen 0xE02A E037

pause key 같은 6비트 이상의 복합키는 일반적인 레지스트리 등록 방식으로는 힘들다 합니다.

*다른 프로그램을 통해 처리한 경우가 있다하니 참고해주세요.
*
https://stackoverflow.com/questions/38846347/what-is-the-scancode-of-pause-break-key

읽어주셔서 감사합니다. 부족한 부분이 있다면 말씀해주세요.