똑같은 PC지만 저마다 사용 패턴은 다릅니다. 물론 키보드의 사용패턴 또한 마찬가지구요.
저는 키보드 버튼중에 전혀 사용하지 않는 키들이 몇개 있습니다. 그래서 이 버튼들을 사운드의 볼륨조절 버튼으로 만들고자 합나다.
게임, 인터넷 서핑이나 특정 프로그램을 사용하는 중에 키보드 버튼의 위치나 기능을 바뀌기를 원하는 분들도 있으리라 생각해 그 방법과 간단한 원리를 설명합니다.
2가지 방법을 소개합니다.
첫번째 방법은 조금 힘들지만 자신이 변경한 시스템에 대해 알 수 있고 이것은 문제가 생겨도 대처가 가능하게 할것입니다.
두번째 방법은 그냥 빠르고 쉽게 변경할 수 있는 유틸리티를 소개합니다.
키보드 매핑, 키 버튼의 위치나 기능 바꾸기 (볼륨 조절) SharpKeys 2
첫번째는 레지스트리에 스캔코드맵을 만들어주는겁니다. 이것을 리매핑 작업이라 합니다.
스캔코드의 규격은 여러가지가 있습니다. 우리가 키보드로 신호를 입력하면 이것을 받은 PC에서는 바이오스의 스캔코드로 변환하여 운영체제에 전달합니다.
그럼 운영체제가 그 신호를 받아 해당 작업을 실행하는데 그 이전에 레지스트리에 정의된 스캔코드맵이 존재한다면 이를 반영하여 변형된 작업이 실행됩니다.
때문에 변형된 키보드의 세팅을 없애고 처음 상태로 돌아가려면 레지스트리에 만들어준 스캔코드맵을 삭제하기만 하면 됩니다.
그럼 작업을 시작해 봅니다.
하단 작업표시줄의 검색입력창에 '레지스트리'를 입력해 레지스트리편집기를 실행합니다.
'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout' 경로를 찾아갑니다.
Keyboard Layout 항목에서 마우스 오른쪽을 클릭하고 '새로만들기->이진값'을 선택합니다. '새 값'이란 항목이 생기면 이것의 이름을 'Scancode Map'이라 정해줍니다. 오타가 있어 수정을 하려면 F2 키를 누르고 삭제하려면 'Delete'키로 삭제합니다.
새로만든 Scancode Map을 더블클릭해서 수정창을 띄웁니다. 여기에 우리가 변경하고 싶은 키보드의 키코드들을 정의해줍니다. 16진수값들이 나열되어 익숙하진 않겠지만 설명을 보면 그리 어려운 작없은 아닐겁니다.
위 스샷은 볼륨업과 다운 2가지 기능을 설정한것인데 이것을 예로 설명하겠습니다.
좌측과 '00000000'과 우측의 이상한 문자는 신경쓰지 마세요. 가운데 부분만 편집하면 됩니다.
가운데 부분이 텅텅 비어있을텐데 첫줄에 00,00,00,00,00,00,00,00 을 채워넣습니다.
4자리를 1개의 단위로 생각하세요.
앞의 '00,00,00,00'은 헤드의 버전이고 뒤의 '00,00,00,00' 헤더의 플라그입니다. 항상 '0'입니다.
둘째줄엔 '03,00,00,00'처럼 키값을 바꾸고자하는 횟수를 입력하는것으로 시작합니다.
스샷에서는 볼륨업,볼륨다운,종료의 3가지 작업이 있으므로 03으로 시작했습니다.
이후엔 4자리 단위로 매핑코드를 연속해서 입력해주면 됩니다.
마지막의 '00,00,00,00'이 종료를 나타내는 Null 신호값입니다. 헤더처럼 종료도 항상 똑같은 모습으로 마쳐줘야 합니다.
위의 2번째줄에서 매핑갯수+1이 되는 이유가 이 Null신호값까지 포함해서 적어줘야 하기때문입니다.
그럼 다시 2번째줄을 상세히 보겠습니다.
앞의 '03,00,00,00'은 설명되었고 '2E,E0,53,00', '30,E0,52,00' 봐야합니다.
우선 변경하고자 하는 키코드를 알아야겠지요.
키버튼(기능) | 스캔코드 | 키값 | 상수값
--------------------------------------------------------------
숫자패드 0 (Ins) | 52 | 0x60 | VK_NUMPAD0
숫자패드 . (Del) | 53 | 0x6E | VK_DECIMAL
볼륨 업 | E0 30 | 0xAF | VK_VOLUME_UP
볼륨 다운 | E0 2E | 0xAE | VK_VOLUME_DOWN
'2E,E0,53,00' - 숫자패드의 '.' 버튼에 볼륨다운 기능을 할당
'30,E0,52,00' - 숫자패드의 '0' 버튼에 볼륨업 기능을 할당
앞 두자리는 할당될 키나 기능, 뒤의 두자리는 현재 키의 코드값
스캔코드값을 레지스트리에 쓸때 숫자가 뒤바뀐것을 신경쓰셔야 합니다.
'E0 2E'가 아니라 '2E E0'로 저장되어 있죠.
컴퓨터에서 연속된 값을 배열하는 방법은 최상위 바이트부터 저장하는 방식과 최하위 바이트부터 저장하는 방식이 있는데 인텔 x86 아키텍처에서 후자를 선택했으니 그냥 시키는대로 해야합니다. 헷갈려보인다고 따져봐야 방법 없습니다.
또 이상한게 보이시나요?
스캔코드에 'E0' 붙은게 있고 안붙은게 있죠. 안붙은건 코드값를 쓰고 나머지 공간은 '0'으로 채우면 됩니다. 'E0'이 붙은건 'E0'으로 채워줘야겠죠.
스캔코드는 1바이트로 이루어져 있으나 일부는 2바이트로 만들어져 있습니다. 이것들은 'E0', 'E1'의 선행 바이트를 가지고 있습니다. 일반적으로 중복된 키나 특수기능을 구분하는데 사용합니다.
여기서 중요한건 스캔코드표를 보고 레지스트리에 입력하는 방법과 순서만 알면 됩니다.
입력작업이 끝났으면 레지스트리를 닫고 PC를 재부팅해야 작업결과를 볼 수 있습니다.
Key Scan
Num Label Code Symbolic Constant Value
--- ------------- ---- ---------------------- --------
1 ~ ` 29 VK_OEM_3 0xC0
2 ! 1 02 0x31
3 @ 2 03 0x32
4 # 3 04 0x33
5 $ 4 05 0x34
6 % 5 06 0x35
7 ^ 6 07 0x36
8 & 7 08 0x37
9 * 8 09 0x38
10 ( 9 0A 0x39
11 ) 0 0B 0x30
12 _ - 0C VK_OEM_MINUS 0xBD
13 + = 0D VK_OEM_PLUS 0xBB
15 Backspace 0E VK_BACK 0x08
16 Tab 0F VK_TAB 0x09
17 Q 10 0x51
18 W 11 0x57
19 E 12 0x45
20 R 13 0x52
21 T 14 0x54
22 Y 15 0x59
23 U 16 0x55
24 I 17 0x49
25 O 18 0x4F
26 P 19 0x50
27 { [ 1A VK_OEM_4 0xDB
28 } ] 1B VK_OEM_6 0xDD
29 | \ 2B VK_OEM_5 0xDC
30 Caps Lock 3A VK_CAPITAL 0x14
31 A 1E 0x41
32 S 1F 0x53
33 D 20 0x44
34 F 21 0x46
35 G 22 0x47
36 H 23 0x48
37 J 24 0x4A
38 K 25 0x4B
39 L 26 0x4C
40 : ; 27 VK_OEM_1 0xBA
41 " ' 28 VK_OEM_7 0xDE
42 (in'tl ) 2B
43 Enter 1C VK_RETURN 0x0D
44 L SHIFT 2A VK_SHIFT 0x10
45 (in'tl ) 56
46 Z 2C 0x5A
47 X 2D 0x58
48 C 2E 0x43
49 V 2F 0x56
50 B 30 0x42
51 N 31 0x4E
52 M 32 0x4D
53 < , 33 VK_OEM_COMMA 0xBC
54 > . 34 VK_OEM_PERIOD 0xBE
55 ? / 35 VK_OEM_2 0xBF
56 (in'tl ) 73
57 R SHIFT 36
58 L CTRL 1D VK_CONTROL 0x11
60 L ALT 38 VK_MENU 0x12
61 Space Bar 39 VK_SPACE 0x20
62 R ALT E0 38
64 R CTRL E0 1D
75 Insert E0 52 VK_INSERT 0x2D
76 Delete E0 53 VK_DELETE 0x2E
79 L Arrow E0 4B VK_LEFT 0x25
80 Home E0 47 VK_HOME 0x24
81 End E0 4F VK_END 0x23
83 Up Arrow E0 48 VK_UP 0x26
84 Dn Arrow E0 50 VK_DOWN 0x28
85 Page Up E0 49 VK_PRIOR 0x21
86 Page Down E0 51 VK_NEXT 0x22
89 R Arrow E0 4D VK_RIGHT 0x27
90 Num Lock 45 VK_NUMLOCK 0x90
91 Numeric 7 47 VK_NUMPAD7 0x67
92 Numeric 4 4B VK_NUMPAD4 0x64
93 Numeric 1 4F VK_NUMPAD1 0x61
95 Num / E0 35 VK_DIVIDE 0x6F
95 LS+Num / E0 B5
95 RS+Num / E0 B6
96 Numeric 8 48 VK_NUMPAD8 0x68
97 Numeric 5 4C VK_NUMPAD5 0x65
98 Numeric 2 50 VK_NUMPAD2 0x62
99 Numeric 0 52 VK_NUMPAD0 0x60
100 Numeric * 37 VK_MULTIPLY 0x6A
101 Numeric 9 49 VK_NUMPAD9 0x69
102 Numeric 6 4D VK_NUMPAD6 0x66
103 Numeric 3 51 VK_NUMPAD3 0x63
104 Numeric . 53 VK_DECIMAL 0x6E
105 Numeric - 4A VK_SUBTRACT 0x6D
106 Numeric + 4E VK_ADD 0x6B
107 (in'tl ) 7E
108 NumEnter E0 1C VK_SEPARATOR 0x6C
110 Esc 01 VK_ESCAPE 0x1B
112 F1 3B VK_F1 0x70
113 F2 3C VK_F2 0x71
114 F3 3D VK_F3 0x72
115 F4 3E VK_F4 0x73
116 F5 3F VK_F5 0x74
117 F6 40 VK_F6 0x75
118 F7 41 VK_F7 0x76
119 F8 42 VK_F8 0x77
120 F9 43 VK_F9 0x78
121 F10 44 VK_F10 0x79
122 F11 57 VK_F11 0x7A
123 F12 58 VK_F12 0x7B
124 PrintScreen E0 A2 VK_SNAPSHOT 0x2C
124 Ctl+PrtScrn E0 37
124 Shft+PrtScrn E0 37
124 Alt+PrtScrn 54
125 Scroll Lock 46 VK_SCROLL 0x91
126 Pause (??) VK_PAUSE 0x13
L-Win E0 5B VK_LWIN 0x5B
R-Win E0 5C VK_RWIN 0x5C
Apps E0 5D VK_APPS 0x5D
------------ dedicated button scancodes ------------
E0 6A VK_BROWSER_BACK 0xA6
E0 69 VK_BROWSER_FORWARD 0xA7
E0 67 VK_BROWSER_REFRESH 0xA8
E0 68 VK_BROWSER_STOP 0xA9
E0 65 VK_BROWSER_SEARCH 0xAA
E0 66 VK_BROWSER_FAVORITES 0xAB
E0 32 VK_BROWSER_HOME 0xAC
E0 20 VK_VOLUME_MUTE 0xAD
E0 2E VK_VOLUME_DOWN 0xAE
E0 30 VK_VOLUME_UP 0xAF
E0 19 VK_MEDIA_NEXT_TRACK 0xB0
E0 10 VK_MEDIA_PREV_TRACK 0xB1
E0 24 VK_MEDIA_STOP 0xB2
E0 22 VK_MEDIA_PLAY_PAUSE 0xB3
E0 6C VK_LAUNCH_MAIL 0xB4
E0 6D VK_LAUNCH_MEDIA_SELECT 0xB5
compMgmtLauncher E0 6B VK_LAUNCH_APP1 0xB6
calc.exe E0 21 VK_LAUNCH_APP2 0xB7
위의 표에서 원하는 코드 찾기 힘들죠. 눈도 아프고. 쉽게 키보드를 눌러 스캔코드값을 확인하는 방법도 있습니다.
PassMark KeyboardTest란 유틸리티를 이용하는 방법입니다.
www.passmark.com/products/keytest/
이게 참 쓸만한 유틸리티인데 유료입니다. 그러나 30일간 무료 사용이 가능하기때문에 작업하는덴 충분합니다. 키보드 매핑작업을 맨날 할건 아니잖아요.
설치후 실행하면 로그인창이 뜨는데 아무것도 입력하지 않고 그냥 'Continue' 버튼 누르면 정상적으로 사용가능합니다.
키보드에서 키를 누르면 해당키의 색이 변하면서 후상단에 키코드값이 나옵니다.
마지막으로 키보드를 원래 상태로 되돌리는 방법은 아주 쉬운데요.
레지스트리에서 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout' 로 찾아가 만들어놓은 'Scancode Map'을 삭제하면 됩니다.
너무 길어지는듯해서 2번째의 쉬운 방법은 따로 포스팅하겠습니다.
댓글