잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).
여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.
감사합니다. -현록
현록의 기록저장소
키보드 키 강제 치환과 키 코드 본문
에서 키보드의 키와 키 신호에 대해 잠시 언급했던 적이 있습니다.
하드웨어에서 발생시키는 신호에 맞게 OS가 동작해주는 것이죠.
이런 키는, 키 신호를 판독하여
프로그램으로 키를 맵핑할 수도 있고,
OS단에서 키를 치환할 수도 있습니다.
프로그램의 장점은 프로그램을 끄면 그만인 점.
단점은 사용할 곳에 따라 그에 맞는 권한으로 잘 실행시켜야한다는 점,
더 상위권한의 프로그램이 더 우선권을 가질 수 있다는 점.
OS단에서의 강제 치환의 장점은,
컴퓨터가 켜질 때에 최상위 우선권으로 고정된다는 점.
단점은 설정을 변경하고 재부팅까지 해야 적용된다는 점.
전 프로그램으로 키를 다루는 것을 추천하지만,
사람 일은 모르니, 강제 치환시키는 법도 소개합니다.
레지스트리에 값을 등록시켜서 강제로 치환할겁니다.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
의 경로에 설정합니다.
여기에 Scancode Map 이라는 이름의 Hex 값을 추가할 것입니다.
직접 regedit으로 설정해도 되겠지만,
Hex값을 조금 귀찮게 다뤄야하기 때문에, .reg 파일을 만들어서 등록/수정하고 삭제할겁니다.
링크 아래부터는 코드의 이론적인 설명 부분입니다.
실제 코드는 여기에서 자동으로 생성할 수 있습니다.
https://blackdeery.github.io/scmap/
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,\
02,00,00,00,\
F2,E0,52,E0,\
00,00,00,00
이제 아래 부분의 설명입니다.
"Scancode Map"=hex:00,00,00,00,\ #1 00,00,00,00,\ #2 03,00,00,00,\ #3 F2,E0,52,E0,\ #4 F1,E0,53,E0,\ #5 00,00,00,00 #6 |
ㆁ#1과 #2의 00,00,00,00들은 항상 고정되는 패턴입니다.
ㆁ#3의 03은, 쉽게 설명하면 이 아래의 줄 수를 적으면 됩니다.
*이 아래로 3개의 줄이 있으니, 03을 적으면 됩니다.
*Hex값으로 적어야하니, 16진수로 적습니다.
*키 치환을 그렇게나 많이할까 싶지만,
255(FF)개를 넘으면, 오른쪽으로 증가하면 될 것 같습니다.
(FF,00,00,00→00,01,00,00→01,01,00,00→02,01,00,00→...)
ㆁ#4와 #5는 각각 실제 치환에 관한 내용입니다.
*#4를 보면, ■을 ■으로 바꾸겠다는의미입니다.
*#5를 보면, ■을 ■으로 바꾸겠다는의미입니다.
*즉, 오른쪽 키를 왼쪽 키로 사용하겠다는 의미입니다.
*여기에 사용할 값은 아래에 표로 제공합니다.
*예시의 내용은 이렇습니다.
ㆍInsert키를 한/영키로 사용
ㆍDelete키를 한자키로 사용
ㆁ#6을 보면, 마지막 줄은 항상 00,00,00,00으로 끝납니다.
이 양식으로 메모장에 붙여넣고
---.reg 파일로 저장한 후, 실행하면 됩니다.
.reg 파일을 실행하면 덮어씌워버리므로 해당 방법으로 수정하시면 됩니다.
모든 Scancode Map 값을 날려버리고 싶다면,
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=-
로, =- 를 주면 됩니다.
아래는 키 신호와 레지스트리에 사용할 값을 적어둔 것입니다.
바이트 단위(16진수 두 글자)로 순서가 바뀐 것은,
데스크탑 메모리 주소가 little endian으로 정렬되기 때문이고,
(개발자가 아니라면 큰 신경 쓸 필요는 없습니다)
SC가 01--인데, --,01이 아닌, --,E0가 되는 이유는 저도 모르겠습니다.
동일한 SC는 여러개 존재할 수 있는데, 실제 하드웨어에 사용하는 키 신호로 정하는 것인지..
키 종류 |
Scan Code(SC) |
Virtual Key(VK) |
레지스트리에 사용할 값 |
마우스 LButton |
- |
01 |
- |
마우스 RButton |
- |
02 |
- |
마우스 MButton |
- |
04 |
- |
마우스 Xbutton1 |
- |
05 |
- |
마우스 XButton2 |
- |
06 |
- |
Esc |
0001 |
1B |
01,00 |
F1 |
003B |
70 |
3B,00 |
F2 |
003C |
71 |
3C,00 |
F3 |
003D |
72 |
3D,00 |
F4 |
003E |
73 |
3E,00 |
F5 |
003F |
74 |
3F,00 |
F6 |
0040 |
75 |
40,00 |
F7 |
0041 |
76 |
41,00 |
F8 |
0042 |
77 |
42,00 |
F9 |
0043 |
78 |
43,00 |
F10 |
0044 |
79 |
44,00 |
F11 |
0057 |
7A |
57,00 |
F12 |
0058 |
7B |
58,00 |
Tab |
000F |
09 |
0F,00 |
Enter |
001C |
0D |
1C,00 |
Backspace |
000E |
08 |
0E,00 |
Space |
0039 |
20 |
39,00 |
CapsLock |
003A |
14 |
3A,00 |
LShift |
002A |
A0 |
2A,00 |
RShift |
0036 |
A1 |
36,00 |
LAlt |
0038 |
A4 |
38,00 |
RAlt |
0138 |
A5 |
38,E0 |
LCtrl |
001D |
A2 |
1D,00 |
RCtrl |
011D |
A3 |
1D,E0 |
LWin |
015B |
5B |
5B,E0 |
RWin |
015C |
5C |
5C,E0 |
AppsKey |
015D |
5D |
5D,E0 |
한/영 |
01F2 |
15 |
F2,E0 |
한자 |
01F1 |
19 |
F1,E0 |
101키(종류1-2)에서의 RAlt/RCtrl을 치환한 한/영 |
0138 |
15 |
???? |
101키(종류1-2)에서의 RAlt/RCtrl을 치환한 한자 |
011D |
19 |
???? |
101키(종류3)에서의 Shift+Space로 호출하는 한/영 |
0039 |
15 |
???? |
101키(종류3)에서의 Ctrl+Space로 호출하는 한자 |
0039 |
19 |
???? |
Up(↑) |
0148 |
26 |
48,E0 |
Left(←) |
014B |
25 |
4B,E0 |
Right(→) |
014D |
27 |
4D,E0 |
Down(↓) |
0150 |
28 |
50,E0 |
Insert |
0152 |
2D |
52,E0 |
Delete |
0153 |
2E |
53,E0 |
Home |
0147 |
24 |
47,E0 |
End |
014F |
23 |
4F,E0 |
PageUp |
0149 |
21 |
49,E0 |
PageDown |
0151 |
22 |
51,E0 |
NumLock |
0145 |
90 |
45,E0 |
Numpad0 |
0052 |
60 |
52,00 |
Numpad1 |
004F |
61 |
4F,00 |
Numpad2 |
0050 |
62 |
50,00 |
Numpad3 |
0051 |
63 |
51,00 |
Numpad4 |
004B |
64 |
4B,00 |
Numpad5 |
004C |
65 |
4C,00 |
Numpad6 |
004D |
66 |
4D,00 |
Numpad7 |
0047 |
67 |
47,00 |
Numpad8 |
0048 |
68 |
48,00 |
Numpad9 |
0049 |
69 |
49,00 |
NumpadAdd(+) |
004E |
6B |
4E,00 |
NumpadSub(-) |
004A |
6D |
4A,00 |
NumpadMult(*) |
0037 |
6A |
37,00 |
NumpadDiv(/) |
0135 |
6F |
35,E0 |
NumpadDot(.) |
0053 |
6E |
53,00 |
NumpadEnter |
011C |
0D |
1C,E0 |
PrintScreen |
0137 |
2C |
37,E0 |
ScrollLock |
0046 |
91 |
46,00 |
Pause/Break |
0045 |
13 |
45,00 |
`(~) |
0029 |
C0 |
29,00 |
1 |
0002 |
31 |
02,00 |
2 |
0003 |
32 |
03,00 |
3 |
0004 |
33 |
04,00 |
4 |
0005 |
34 |
05,00 |
5 |
0006 |
35 |
06,00 |
6 |
0007 |
36 |
07,00 |
7 |
0008 |
37 |
08,00 |
8 |
0009 |
38 |
09,00 |
9 |
000A |
39 |
0A,00 |
0 |
000B |
30 |
0B,00 |
- |
000C |
BD |
0C,00 |
= |
000D |
BB |
0D,00 |
Q |
0010 |
51 |
10,00 |
W |
0011 |
57 |
11,00 |
E |
0012 |
45 |
12,00 |
R |
0013 |
52 |
13,00 |
T |
0014 |
54 |
14,00 |
Y |
0015 |
59 |
15,00 |
U |
0016 |
55 |
16,00 |
I |
0017 |
49 |
17,00 |
O |
0018 |
4F |
18,00 |
P |
0019 |
50 |
19,00 |
[ |
001A |
DB |
1A,00 |
] |
001B |
DD |
1B,00 |
\ |
002B |
DC |
2B,00 |
A |
001E |
41 |
1E,00 |
S |
001F |
53 |
1F,00 |
D |
0020 |
44 |
20,00 |
F |
0021 |
46 |
21,00 |
G |
0022 |
47 |
22,00 |
H |
0023 |
48 |
23,00 |
J |
0024 |
4A |
24,00 |
K |
0025 |
4B |
25,00 |
L |
0026 |
4C |
26,00 |
; |
0027 |
BA |
27,00 |
' |
0028 |
DE |
28,00 |
Z |
002C |
5A |
2C,00 |
X |
002D |
58 |
2D,00 |
C |
002E |
43 |
2E,00 |
V |
002F |
56 |
2F,00 |
B |
0030 |
42 |
30,00 |
N |
0031 |
4E |
31,00 |
M |
0032 |
4D |
32,00 |
Comma(,) |
0033 |
BC |
33,00 |
Dot(.) |
0034 |
BE |
34,00 |
/ |
0035 |
BF |
35,00 |
키보드의 진짜 [한/영]과 [한자]는
하드웨어적으로 Down 신호만 발생시키고,
Up 신호는 발생시키지 않기 때문에,
이 키를 치환하게 되면, 키가 계속 눌려있게 될 수 있으니 치환용으로 적절하지 않습니다.
(이 키를 치환하면 문제지만, 다른 키를 이 키로 사용하는 것은 문제가 없습니다.
해당 키는 하드웨어에서 제대로 둘 다 신호가 발생할 것이기 때문.)
(101키 키보드의 [한/영]과 [한자]는 진짜가 아니라
RAlt와 RCtrl에 각인만 바꾼 것이니,
제대로 Down/Up 신호가 발생합니다.)
이 외의 키 코드에 대한 문서는 검색해보시길
https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
'Programs > help' 카테고리의 다른 글
시작메뉴(타일메뉴) 아이콘 꾸미기 Tileiconifier (0) | 2020.03.15 |
---|---|
해상도 변경하다 깨진 시작메뉴(타일메뉴) 복원하기 (0) | 2020.03.15 |
한/영 누르면 Alt 문제 해결 (1) | 2020.02.29 |
단발성 US키보드 제거 (20) | 2019.12.12 |
자꾸 생기는 US키보드 삭제, 제거 (20) | 2019.07.27 |
잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).
여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.
감사합니다. -현록