본문 바로가기
컴퓨터

키보드 매핑, 키 버튼의 위치나 기능 바꾸기 (볼륨 조절) 1

by 그믐치 2021. 2. 6.

똑같은 PC지만 저마다 사용 패턴은 다릅니다. 물론 키보드의 사용패턴 또한 마찬가지구요.

 

저는 키보드 버튼중에 전혀 사용하지 않는 키들이 몇개 있습니다. 그래서 이 버튼들을 사운드의 볼륨조절 버튼으로 만들고자 합나다.

 

게임, 인터넷 서핑이나 특정 프로그램을 사용하는 중에 키보드 버튼의 위치나 기능을 바뀌기를 원하는 분들도 있으리라 생각해 그 방법과 간단한 원리를 설명합니다.

 

2가지 방법을 소개합니다.

 

첫번째 방법은 조금 힘들지만 자신이 변경한 시스템에 대해 알 수 있고 이것은 문제가 생겨도 대처가 가능하게 할것입니다.

 

두번째 방법은 그냥 빠르고 쉽게 변경할 수 있는 유틸리티를 소개합니다.

 

키보드 매핑, 키 버튼의 위치나 기능 바꾸기 (볼륨 조절) SharpKeys 2

 

키보드 매핑, 키 버튼의 위치나 기능 바꾸기 (볼륨 조절) SharpKeys 2

이전 글에서 키보드 매핑에 관해 이야기했습니다. 간단한 원리와 나의 시스템 어디에 어떤 작업이 되는것인지를 알아야 후에 수정이나 오작동에 대한 대처를 할수 있을것 같아 그 내용을 썼습

showering.tistory.com

 

첫번째는 레지스트리에 스캔코드맵을 만들어주는겁니다. 이것을 리매핑 작업이라 합니다.

 

스캔코드의 규격은 여러가지가 있습니다. 우리가 키보드로 신호를 입력하면 이것을 받은 PC에서는 바이오스의 스캔코드로 변환하여 운영체제에 전달합니다.

 

그럼 운영체제가 그 신호를 받아 해당 작업을 실행하는데 그 이전에 레지스트리에 정의된 스캔코드맵이 존재한다면 이를 반영하여 변형된 작업이 실행됩니다.

 

때문에 변형된 키보드의 세팅을 없애고 처음 상태로 돌아가려면 레지스트리에 만들어준 스캔코드맵을 삭제하기만 하면 됩니다.

 

그럼 작업을 시작해 봅니다.

 

하단 작업표시줄의 검색입력창에 '레지스트리'를 입력해 레지스트리편집기를 실행합니다.

'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout' 경로를 찾아갑니다.


Keyboard Layout 항목에서 마우스 오른쪽을 클릭하고 '새로만들기->이진값'을 선택합니다. '새 값'이란 항목이 생기면 이것의 이름을 'Scancode Map'이라 정해줍니다. 오타가 있어 수정을 하려면 F2 키를 누르고 삭제하려면 'Delete'키로 삭제합니다.

 

레지스트리 편집
이전에 이 작업을 한적 없다면 오른쪽에 'Scancode Map' 항목이 없을겁니다.

 

새로만든 Scancode Map을 더블클릭해서 수정창을 띄웁니다. 여기에 우리가 변경하고 싶은 키보드의 키코드들을 정의해줍니다. 16진수값들이 나열되어 익숙하진 않겠지만 설명을 보면 그리 어려운 작없은 아닐겁니다.

 

레지스트리 편집
숫자패드의 '0(Ins)'과 '.(Del)'을 볼륨업,다운으로 바꾼 설정입니다.

 

위 스샷은 볼륨업과 다운 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/

 

PassMark KeyboardTest - Keyboard test software

Established keyboard testing utility KeyboardTest has been used to test and check for faulty keyboards by PC enthusiasts and production line environments (in batch mode testing) since 2003. Although desktop keyboards can be quickly and cheaply replaced, th

www.passmark.com

PassMark KeyboardTest
PassMark KeyboardTest

 

이게 참 쓸만한 유틸리티인데 유료입니다. 그러나 30일간 무료 사용이 가능하기때문에 작업하는덴 충분합니다. 키보드 매핑작업을 맨날 할건 아니잖아요.

 

설치후 실행하면 로그인창이 뜨는데 아무것도 입력하지 않고 그냥 'Continue' 버튼 누르면 정상적으로 사용가능합니다.

 

키보드에서 키를 누르면 해당키의 색이 변하면서 후상단에 키코드값이 나옵니다.

 

마지막으로 키보드를 원래 상태로 되돌리는 방법은 아주 쉬운데요.

레지스트리에서 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout' 로 찾아가 만들어놓은 'Scancode Map'을 삭제하면 됩니다.

 

너무 길어지는듯해서 2번째의 쉬운 방법은 따로 포스팅하겠습니다.

댓글