1
>
/*---------------------------------------------------------------------------------------------
keyCodes.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
/**
7
>
* Virtual Key Codes, the value does not hold any inherent meaning.
8
>
* Inspired somewhat from https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
9
>
* But these are "more general", as they should work across browsers & OS`s.
10
>
*/
11
>
export const enum KeyCode {
12
>
DependsOnKbLayout = -1,
13
>
14
>
/**
15
>
* Placed first to cover the 0 value of the enum.
16
>
*/
17
>
Unknown = 0,
18
>
19
>
Backspace,
20
>
Tab,
21
>
Enter,
22
>
Shift,
23
>
Ctrl,
24
>
Alt,
25
>
PauseBreak,
26
>
CapsLock,
27
>
Escape,
28
>
Space,
29
>
PageUp,
30
>
PageDown,
31
>
End,
32
>
Home,
33
>
LeftArrow,
34
>
UpArrow,
35
>
RightArrow,
36
>
DownArrow,
37
>
Insert,
38
>
Delete,
39
>
40
>
Digit0,
41
>
Digit1,
42
>
Digit2,
43
>
Digit3,
44
>
Digit4,
45
>
Digit5,
46
>
Digit6,
47
>
Digit7,
48
>
Digit8,
49
>
Digit9,
50
>
51
>
KeyA,
52
>
KeyB,
53
>
KeyC,
54
>
KeyD,
55
>
KeyE,
56
>
KeyF,
57
>
KeyG,
58
>
KeyH,
59
>
KeyI,
60
>
KeyJ,
61
>
KeyK,
62
>
KeyL,
63
>
KeyM,
64
>
KeyN,
65
>
KeyO,
66
>
KeyP,
67
>
KeyQ,
68
>
KeyR,
69
>
KeyS,
70
>
KeyT,
71
>
KeyU,
72
>
KeyV,
73
>
KeyW,
74
>
KeyX,
75
>
KeyY,
76
>
KeyZ,
77
>
78
>
Meta,
79
>
ContextMenu,
80
>
81
>
F1,
82
>
F2,
83
>
F3,
84
>
F4,
85
>
F5,
86
>
F6,
87
>
F7,
88
>
F8,
89
>
F9,
90
>
F10,
91
>
F11,
92
>
F12,
93
>
F13,
94
>
F14,
95
>
F15,
96
>
F16,
97
>
F17,
98
>
F18,
99
>
F19,
100
>
F20,
101
>
F21,
102
>
F22,
103
>
F23,
104
>
F24,
105
>
106
>
NumLock,
107
>
ScrollLock,
108
>
109
>
/**
110
>
* Used for miscellaneous characters; it can vary by keyboard.
111
>
* For the US standard keyboard, the ';:' key
112
>
*/
113
>
Semicolon,
114
>
/**
115
>
* For any country/region, the '+' key
116
>
* For the US standard keyboard, the '=+' key
117
>
*/
118
>
Equal,
119
>
/**
120
>
* For any country/region, the ',' key
121
>
* For the US standard keyboard, the ',<' key
122
>
*/
123
>
Comma,
124
>
/**
125
>
* For any country/region, the '-' key
126
>
* For the US standard keyboard, the '-_' key
127
>
*/
128
>
Minus,
129
>
/**
130
>
* For any country/region, the '.' key
131
>
* For the US standard keyboard, the '.>' key
132
>
*/
133
>
Period,
134
>
/**
135
>
* Used for miscellaneous characters; it can vary by keyboard.
136
>
* For the US standard keyboard, the '/?' key
137
>
*/
138
>
Slash,
139
>
/**
140
>
* Used for miscellaneous characters; it can vary by keyboard.
141
>
* For the US standard keyboard, the '`~' key
142
>
*/
143
>
Backquote,
144
>
/**
145
>
* Used for miscellaneous characters; it can vary by keyboard.
146
>
* For the US standard keyboard, the '[{' key
147
>
*/
148
>
BracketLeft,
149
>
/**
150
>
* Used for miscellaneous characters; it can vary by keyboard.
151
>
* For the US standard keyboard, the '\|' key
152
>
*/
153
>
Backslash,
154
>
/**
155
>
* Used for miscellaneous characters; it can vary by keyboard.
156
>
* For the US standard keyboard, the ']}' key
157
>
*/
158
>
BracketRight,
159
>
/**
160
>
* Used for miscellaneous characters; it can vary by keyboard.
161
>
* For the US standard keyboard, the ''"' key
162
>
*/
163
>
Quote,
164
>
/**
165
>
* Used for miscellaneous characters; it can vary by keyboard.
166
>
*/
167
>
OEM_8,
168
>
/**
169
>
* Either the angle bracket key or the backslash key on the RT 102-key keyboard.
170
>
*/
171
>
IntlBackslash,
172
>
173
>
Numpad0, // VK_NUMPAD0, 0x60, Numeric keypad 0 key
174
>
Numpad1, // VK_NUMPAD1, 0x61, Numeric keypad 1 key
175
>
Numpad2, // VK_NUMPAD2, 0x62, Numeric keypad 2 key
176
>
Numpad3, // VK_NUMPAD3, 0x63, Numeric keypad 3 key
177
>
Numpad4, // VK_NUMPAD4, 0x64, Numeric keypad 4 key
178
>
Numpad5, // VK_NUMPAD5, 0x65, Numeric keypad 5 key
179
>
Numpad6, // VK_NUMPAD6, 0x66, Numeric keypad 6 key
180
>
Numpad7, // VK_NUMPAD7, 0x67, Numeric keypad 7 key
181
>
Numpad8, // VK_NUMPAD8, 0x68, Numeric keypad 8 key
182
>
Numpad9, // VK_NUMPAD9, 0x69, Numeric keypad 9 key
183
>
184
>
NumpadMultiply, // VK_MULTIPLY, 0x6A, Multiply key
185
>
NumpadAdd, // VK_ADD, 0x6B, Add key
186
>
NUMPAD_SEPARATOR, // VK_SEPARATOR, 0x6C, Separator key
187
>
NumpadSubtract, // VK_SUBTRACT, 0x6D, Subtract key
188
>
NumpadDecimal, // VK_DECIMAL, 0x6E, Decimal key
189
>
NumpadDivide, // VK_DIVIDE, 0x6F,
190
>
191
>
/**
192
>
* Cover all key codes when IME is processing input.
193
>
*/
194
>
KEY_IN_COMPOSITION,
195
>
196
>
ABNT_C1, // Brazilian (ABNT) Keyboard
197
>
ABNT_C2, // Brazilian (ABNT) Keyboard
198
>
199
>
AudioVolumeMute,
200
>
AudioVolumeUp,
201
>
AudioVolumeDown,
202
>
203
>
BrowserSearch,
204
>
BrowserHome,
205
>
BrowserBack,
206
>
BrowserForward,
207
>
208
>
MediaTrackNext,
209
>
MediaTrackPrevious,
210
>
MediaStop,
211
>
MediaPlayPause,
212
>
LaunchMediaPlayer,
213
>
LaunchMail,
214
>
LaunchApp2,
215
>
216
>
/**
217
>
* VK_CLEAR, 0x0C, CLEAR key
218
>
*/
219
>
Clear,
220
>
221
>
/**
222
>
* Placed last to cover the length of the enum.
223
>
* Please do not depend on this value!
224
>
*/
225
>
MAX_VALUE
226
>
}
227
>
228
>
/**
229
>
* keyboardEvent.code
230
>
*/
231
>
export const enum ScanCode {
232
>
DependsOnKbLayout = -1,
233
>
None,
234
>
Hyper,
235
>
Super,
236
>
Fn,
237
>
FnLock,
238
>
Suspend,
239
>
Resume,
240
>
Turbo,
241
>
Sleep,
242
>
WakeUp,
243
>
KeyA,
244
>
KeyB,
245
>
KeyC,
246
>
KeyD,
247
>
KeyE,
248
>
KeyF,
249
>
KeyG,
250
>
KeyH,
251
>
KeyI,
252
>
KeyJ,
253
>
KeyK,
254
>
KeyL,
255
>
KeyM,
256
>
KeyN,
257
>
KeyO,
258
>
KeyP,
259
>
KeyQ,
260
>
KeyR,
261
>
KeyS,
262
>
KeyT,
263
>
KeyU,
264
>
KeyV,
265
>
KeyW,
266
>
KeyX,
267
>
KeyY,
268
>
KeyZ,
269
>
Digit1,
270
>
Digit2,
271
>
Digit3,
272
>
Digit4,
273
>
Digit5,
274
>
Digit6,
275
>
Digit7,
276
>
Digit8,
277
>
Digit9,
278
>
Digit0,
279
>
Enter,
280
>
Escape,
281
>
Backspace,
282
>
Tab,
283
>
Space,
284
>
Minus,
285
>
Equal,
286
>
BracketLeft,
287
>
BracketRight,
288
>
Backslash,
289
>
IntlHash,
290
>
Semicolon,
291
>
Quote,
292
>
Backquote,
293
>
Comma,
294
>
Period,
295
>
Slash,
296
>
CapsLock,
297
>
F1,
298
>
F2,
299
>
F3,
300
>
F4,
301
>
F5,
302
>
F6,
303
>
F7,
304
>
F8,
305
>
F9,
306
>
F10,
307
>
F11,
308
>
F12,
309
>
PrintScreen,
310
>
ScrollLock,
311
>
Pause,
312
>
Insert,
313
>
Home,
314
>
PageUp,
315
>
Delete,
316
>
End,
317
>
PageDown,
318
>
ArrowRight,
319
>
ArrowLeft,
320
>
ArrowDown,
321
>
ArrowUp,
322
>
NumLock,
323
>
NumpadDivide,
324
>
NumpadMultiply,
325
>
NumpadSubtract,
326
>
NumpadAdd,
327
>
NumpadEnter,
328
>
Numpad1,
329
>
Numpad2,
330
>
Numpad3,
331
>
Numpad4,
332
>
Numpad5,
333
>
Numpad6,
334
>
Numpad7,
335
>
Numpad8,
336
>
Numpad9,
337
>
Numpad0,
338
>
NumpadDecimal,
339
>
IntlBackslash,
340
>
ContextMenu,
341
>
Power,
342
>
NumpadEqual,
343
>
F13,
344
>
F14,
345
>
F15,
346
>
F16,
347
>
F17,
348
>
F18,
349
>
F19,
350
>
F20,
351
>
F21,
352
>
F22,
353
>
F23,
354
>
F24,
355
>
Open,
356
>
Help,
357
>
Select,
358
>
Again,
359
>
Undo,
360
>
Cut,
361
>
Copy,
362
>
Paste,
363
>
Find,
364
>
AudioVolumeMute,
365
>
AudioVolumeUp,
366
>
AudioVolumeDown,
367
>
NumpadComma,
368
>
IntlRo,
369
>
KanaMode,
370
>
IntlYen,
371
>
Convert,
372
>
NonConvert,
373
>
Lang1,
374
>
Lang2,
375
>
Lang3,
376
>
Lang4,
377
>
Lang5,
378
>
Abort,
379
>
Props,
380
>
NumpadParenLeft,
381
>
NumpadParenRight,
382
>
NumpadBackspace,
383
>
NumpadMemoryStore,
384
>
NumpadMemoryRecall,
385
>
NumpadMemoryClear,
386
>
NumpadMemoryAdd,
387
>
NumpadMemorySubtract,
388
>
NumpadClear,
389
>
NumpadClearEntry,
390
>
ControlLeft,
391
>
ShiftLeft,
392
>
AltLeft,
393
>
MetaLeft,
394
>
ControlRight,
395
>
ShiftRight,
396
>
AltRight,
397
>
MetaRight,
398
>
BrightnessUp,
399
>
BrightnessDown,
400
>
MediaPlay,
401
>
MediaRecord,
402
>
MediaFastForward,
403
>
MediaRewind,
404
>
MediaTrackNext,
405
>
MediaTrackPrevious,
406
>
MediaStop,
407
>
Eject,
408
>
MediaPlayPause,
409
>
MediaSelect,
410
>
LaunchMail,
411
>
LaunchApp2,
412
>
LaunchApp1,
413
>
SelectTask,
414
>
LaunchScreenSaver,
415
>
BrowserSearch,
416
>
BrowserHome,
417
>
BrowserBack,
418
>
BrowserForward,
419
>
BrowserStop,
420
>
BrowserRefresh,
421
>
BrowserFavorites,
422
>
ZoomToggle,
423
>
MailReply,
424
>
MailForward,
425
>
MailSend,
426
>
427
>
MAX_VALUE
428
>
}
429
>
430
>
class KeyCodeStrMap {
431
>
432
>
public _keyCodeToStr: string[];
433
>
public _strToKeyCode: { [str: string]: KeyCode };
434
>
435
>
constructor() {
436
>
this._keyCodeToStr = [];
437
>
this._strToKeyCode = Object.create(null);
438
>
}
439
>
440
>
define(keyCode: KeyCode, str: string): void {
441
>
this._keyCodeToStr[keyCode] = str;
442
>
this._strToKeyCode[str.toLowerCase()] = keyCode;
443
>
}
444
>
445
>
keyCodeToStr(keyCode: KeyCode): string {
447
>
}
449
>
strToKeyCode(str: string): KeyCode {
450
return this._strToKeyCode[str.toLowerCase()] || KeyCode.Unknown;
451
}
453
>
454
>
const uiMap = new KeyCodeStrMap();
455
>
const userSettingsUSMap = new KeyCodeStrMap();
456
>
const userSettingsGeneralMap = new KeyCodeStrMap();
457
>
export const EVENT_KEY_CODE_MAP: { [keyCode: number]: KeyCode } = new Array(230);
458
>
export const NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE: { [nativeKeyCode: string]: KeyCode } = {};
459
>
export const SCAN_CODE_STR_TO_EVENT_KEY_CODE: { [scanCodeStr: string]: number } = {};
460
>
const scanCodeIntToStr: string[] = [];
461
>
const scanCodeStrToInt: { [code: string]: number } = Object.create(null);
462
>
const scanCodeLowerCaseStrToInt: { [code: string]: number } = Object.create(null);
463
>
464
>
export const ScanCodeUtils = {
465
>
lowerCaseToEnum: (scanCode: string) => scanCodeLowerCaseStrToInt[scanCode] || ScanCode.None,
466
>
toEnum: (scanCode: string) => scanCodeStrToInt[scanCode] || ScanCode.None,
467
>
toString: (scanCode: ScanCode) => scanCodeIntToStr[scanCode] || 'None'
468
>
};
469
>
470
>
/**
471
>
* -1 if a ScanCode => KeyCode mapping depends on kb layout.
472
>
*/
473
>
export const IMMUTABLE_CODE_TO_KEY_CODE: KeyCode[] = [];
474
>
475
>
/**
476
>
* -1 if a KeyCode => ScanCode mapping depends on kb layout.
477
>
*/
478
>
export const IMMUTABLE_KEY_CODE_TO_CODE: ScanCode[] = [];
479
>
480
>
for (let i = 0; i <= ScanCode.MAX_VALUE; i++) {
481
>
IMMUTABLE_CODE_TO_KEY_CODE[i] = KeyCode.DependsOnKbLayout;
482
>
}
483
>
484
>
for (let i = 0; i <= KeyCode.MAX_VALUE; i++) {
485
>
IMMUTABLE_KEY_CODE_TO_CODE[i] = ScanCode.DependsOnKbLayout;
486
>
}
487
>
488
>
(function () {
489
>
490
>
// See https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
491
>
// See https://github.com/microsoft/node-native-keymap/blob/88c0b0e5/deps/chromium/keyboard_codes_win.h
492
>
493
>
const empty = '';
494
>
type IMappingEntry = [0 | 1, ScanCode, string, KeyCode, string, number, string, string, string];
495
>
const mappings: IMappingEntry[] = [
496
>
// immutable, scanCode, scanCodeStr, keyCode, keyCodeStr, eventKeyCode, vkey, usUserSettingsLabel, generalUserSettingsLabel
497
>
[1, ScanCode.None, 'None', KeyCode.Unknown, 'unknown', 0, 'VK_UNKNOWN', empty, empty],
498
>
[1, ScanCode.Hyper, 'Hyper', KeyCode.Unknown, empty, 0, empty, empty, empty],
499
>
[1, ScanCode.Super, 'Super', KeyCode.Unknown, empty, 0, empty, empty, empty],
500
>
[1, ScanCode.Fn, 'Fn', KeyCode.Unknown, empty, 0, empty, empty, empty],
501
>
[1, ScanCode.FnLock, 'FnLock', KeyCode.Unknown, empty, 0, empty, empty, empty],
502
>
[1, ScanCode.Suspend, 'Suspend', KeyCode.Unknown, empty, 0, empty, empty, empty],
503
>
[1, ScanCode.Resume, 'Resume', KeyCode.Unknown, empty, 0, empty, empty, empty],
504
>
[1, ScanCode.Turbo, 'Turbo', KeyCode.Unknown, empty, 0, empty, empty, empty],
505
>
[1, ScanCode.Sleep, 'Sleep', KeyCode.Unknown, empty, 0, 'VK_SLEEP', empty, empty],
506
>
[1, ScanCode.WakeUp, 'WakeUp', KeyCode.Unknown, empty, 0, empty, empty, empty],
507
>
[0, ScanCode.KeyA, 'KeyA', KeyCode.KeyA, 'A', 65, 'VK_A', empty, empty],
508
>
[0, ScanCode.KeyB, 'KeyB', KeyCode.KeyB, 'B', 66, 'VK_B', empty, empty],
509
>
[0, ScanCode.KeyC, 'KeyC', KeyCode.KeyC, 'C', 67, 'VK_C', empty, empty],
510
>
[0, ScanCode.KeyD, 'KeyD', KeyCode.KeyD, 'D', 68, 'VK_D', empty, empty],
511
>
[0, ScanCode.KeyE, 'KeyE', KeyCode.KeyE, 'E', 69, 'VK_E', empty, empty],
512
>
[0, ScanCode.KeyF, 'KeyF', KeyCode.KeyF, 'F', 70, 'VK_F', empty, empty],
513
>
[0, ScanCode.KeyG, 'KeyG', KeyCode.KeyG, 'G', 71, 'VK_G', empty, empty],
514
>
[0, ScanCode.KeyH, 'KeyH', KeyCode.KeyH, 'H', 72, 'VK_H', empty, empty],
515
>
[0, ScanCode.KeyI, 'KeyI', KeyCode.KeyI, 'I', 73, 'VK_I', empty, empty],
516
>
[0, ScanCode.KeyJ, 'KeyJ', KeyCode.KeyJ, 'J', 74, 'VK_J', empty, empty],
517
>
[0, ScanCode.KeyK, 'KeyK', KeyCode.KeyK, 'K', 75, 'VK_K', empty, empty],
518
>
[0, ScanCode.KeyL, 'KeyL', KeyCode.KeyL, 'L', 76, 'VK_L', empty, empty],
519
>
[0, ScanCode.KeyM, 'KeyM', KeyCode.KeyM, 'M', 77, 'VK_M', empty, empty],
520
>
[0, ScanCode.KeyN, 'KeyN', KeyCode.KeyN, 'N', 78, 'VK_N', empty, empty],
521
>
[0, ScanCode.KeyO, 'KeyO', KeyCode.KeyO, 'O', 79, 'VK_O', empty, empty],
522
>
[0, ScanCode.KeyP, 'KeyP', KeyCode.KeyP, 'P', 80, 'VK_P', empty, empty],
523
>
[0, ScanCode.KeyQ, 'KeyQ', KeyCode.KeyQ, 'Q', 81, 'VK_Q', empty, empty],
524
>
[0, ScanCode.KeyR, 'KeyR', KeyCode.KeyR, 'R', 82, 'VK_R', empty, empty],
525
>
[0, ScanCode.KeyS, 'KeyS', KeyCode.KeyS, 'S', 83, 'VK_S', empty, empty],
526
>
[0, ScanCode.KeyT, 'KeyT', KeyCode.KeyT, 'T', 84, 'VK_T', empty, empty],
527
>
[0, ScanCode.KeyU, 'KeyU', KeyCode.KeyU, 'U', 85, 'VK_U', empty, empty],
528
>
[0, ScanCode.KeyV, 'KeyV', KeyCode.KeyV, 'V', 86, 'VK_V', empty, empty],
529
>
[0, ScanCode.KeyW, 'KeyW', KeyCode.KeyW, 'W', 87, 'VK_W', empty, empty],
530
>
[0, ScanCode.KeyX, 'KeyX', KeyCode.KeyX, 'X', 88, 'VK_X', empty, empty],
531
>
[0, ScanCode.KeyY, 'KeyY', KeyCode.KeyY, 'Y', 89, 'VK_Y', empty, empty],
532
>
[0, ScanCode.KeyZ, 'KeyZ', KeyCode.KeyZ, 'Z', 90, 'VK_Z', empty, empty],
533
>
[0, ScanCode.Digit1, 'Digit1', KeyCode.Digit1, '1', 49, 'VK_1', empty, empty],
534
>
[0, ScanCode.Digit2, 'Digit2', KeyCode.Digit2, '2', 50, 'VK_2', empty, empty],
535
>
[0, ScanCode.Digit3, 'Digit3', KeyCode.Digit3, '3', 51, 'VK_3', empty, empty],
536
>
[0, ScanCode.Digit4, 'Digit4', KeyCode.Digit4, '4', 52, 'VK_4', empty, empty],
537
>
[0, ScanCode.Digit5, 'Digit5', KeyCode.Digit5, '5', 53, 'VK_5', empty, empty],
538
>
[0, ScanCode.Digit6, 'Digit6', KeyCode.Digit6, '6', 54, 'VK_6', empty, empty],
539
>
[0, ScanCode.Digit7, 'Digit7', KeyCode.Digit7, '7', 55, 'VK_7', empty, empty],
540
>
[0, ScanCode.Digit8, 'Digit8', KeyCode.Digit8, '8', 56, 'VK_8', empty, empty],
541
>
[0, ScanCode.Digit9, 'Digit9', KeyCode.Digit9, '9', 57, 'VK_9', empty, empty],
542
>
[0, ScanCode.Digit0, 'Digit0', KeyCode.Digit0, '0', 48, 'VK_0', empty, empty],
543
>
[1, ScanCode.Enter, 'Enter', KeyCode.Enter, 'Enter', 13, 'VK_RETURN', empty, empty],
544
>
[1, ScanCode.Escape, 'Escape', KeyCode.Escape, 'Escape', 27, 'VK_ESCAPE', empty, empty],
545
>
[1, ScanCode.Backspace, 'Backspace', KeyCode.Backspace, 'Backspace', 8, 'VK_BACK', empty, empty],
546
>
[1, ScanCode.Tab, 'Tab', KeyCode.Tab, 'Tab', 9, 'VK_TAB', empty, empty],
547
>
[1, ScanCode.Space, 'Space', KeyCode.Space, 'Space', 32, 'VK_SPACE', empty, empty],
548
>
[0, ScanCode.Minus, 'Minus', KeyCode.Minus, '-', 189, 'VK_OEM_MINUS', '-', 'OEM_MINUS'],
549
>
[0, ScanCode.Equal, 'Equal', KeyCode.Equal, '=', 187, 'VK_OEM_PLUS', '=', 'OEM_PLUS'],
550
>
[0, ScanCode.BracketLeft, 'BracketLeft', KeyCode.BracketLeft, '[', 219, 'VK_OEM_4', '[', 'OEM_4'],
551
>
[0, ScanCode.BracketRight, 'BracketRight', KeyCode.BracketRight, ']', 221, 'VK_OEM_6', ']', 'OEM_6'],
552
>
[0, ScanCode.Backslash, 'Backslash', KeyCode.Backslash, '\\', 220, 'VK_OEM_5', '\\', 'OEM_5'],
553
>
[0, ScanCode.IntlHash, 'IntlHash', KeyCode.Unknown, empty, 0, empty, empty, empty], // has been dropped from the w3c spec
554
>
[0, ScanCode.Semicolon, 'Semicolon', KeyCode.Semicolon, ';', 186, 'VK_OEM_1', ';', 'OEM_1'],
555
>
[0, ScanCode.Quote, 'Quote', KeyCode.Quote, '\'', 222, 'VK_OEM_7', '\'', 'OEM_7'],
556
>
[0, ScanCode.Backquote, 'Backquote', KeyCode.Backquote, '`', 192, 'VK_OEM_3', '`', 'OEM_3'],
557
>
[0, ScanCode.Comma, 'Comma', KeyCode.Comma, ',', 188, 'VK_OEM_COMMA', ',', 'OEM_COMMA'],
558
>
[0, ScanCode.Period, 'Period', KeyCode.Period, '.', 190, 'VK_OEM_PERIOD', '.', 'OEM_PERIOD'],
559
>
[0, ScanCode.Slash, 'Slash', KeyCode.Slash, '/', 191, 'VK_OEM_2', '/', 'OEM_2'],
560
>
[1, ScanCode.CapsLock, 'CapsLock', KeyCode.CapsLock, 'CapsLock', 20, 'VK_CAPITAL', empty, empty],
561
>
[1, ScanCode.F1, 'F1', KeyCode.F1, 'F1', 112, 'VK_F1', empty, empty],
562
>
[1, ScanCode.F2, 'F2', KeyCode.F2, 'F2', 113, 'VK_F2', empty, empty],
563
>
[1, ScanCode.F3, 'F3', KeyCode.F3, 'F3', 114, 'VK_F3', empty, empty],
564
>
[1, ScanCode.F4, 'F4', KeyCode.F4, 'F4', 115, 'VK_F4', empty, empty],
565
>
[1, ScanCode.F5, 'F5', KeyCode.F5, 'F5', 116, 'VK_F5', empty, empty],
566
>
[1, ScanCode.F6, 'F6', KeyCode.F6, 'F6', 117, 'VK_F6', empty, empty],
567
>
[1, ScanCode.F7, 'F7', KeyCode.F7, 'F7', 118, 'VK_F7', empty, empty],
568
>
[1, ScanCode.F8, 'F8', KeyCode.F8, 'F8', 119, 'VK_F8', empty, empty],
569
>
[1, ScanCode.F9, 'F9', KeyCode.F9, 'F9', 120, 'VK_F9', empty, empty],
570
>
[1, ScanCode.F10, 'F10', KeyCode.F10, 'F10', 121, 'VK_F10', empty, empty],
571
>
[1, ScanCode.F11, 'F11', KeyCode.F11, 'F11', 122, 'VK_F11', empty, empty],
572
>
[1, ScanCode.F12, 'F12', KeyCode.F12, 'F12', 123, 'VK_F12', empty, empty],
573
>
[1, ScanCode.PrintScreen, 'PrintScreen', KeyCode.Unknown, empty, 0, empty, empty, empty],
574
>
[1, ScanCode.ScrollLock, 'ScrollLock', KeyCode.ScrollLock, 'ScrollLock', 145, 'VK_SCROLL', empty, empty],
575
>
[1, ScanCode.Pause, 'Pause', KeyCode.PauseBreak, 'PauseBreak', 19, 'VK_PAUSE', empty, empty],
576
>
[1, ScanCode.Insert, 'Insert', KeyCode.Insert, 'Insert', 45, 'VK_INSERT', empty, empty],
577
>
[1, ScanCode.Home, 'Home', KeyCode.Home, 'Home', 36, 'VK_HOME', empty, empty],
578
>
[1, ScanCode.PageUp, 'PageUp', KeyCode.PageUp, 'PageUp', 33, 'VK_PRIOR', empty, empty],
579
>
[1, ScanCode.Delete, 'Delete', KeyCode.Delete, 'Del', 46, 'VK_DELETE', 'Delete', empty],
580
>
[1, ScanCode.End, 'End', KeyCode.End, 'End', 35, 'VK_END', empty, empty],
581
>
[1, ScanCode.PageDown, 'PageDown', KeyCode.PageDown, 'PageDown', 34, 'VK_NEXT', empty, empty],
582
>
[1, ScanCode.ArrowRight, 'ArrowRight', KeyCode.RightArrow, 'RightArrow', 39, 'VK_RIGHT', 'Right', empty],
583
>
[1, ScanCode.ArrowLeft, 'ArrowLeft', KeyCode.LeftArrow, 'LeftArrow', 37, 'VK_LEFT', 'Left', empty],
584
>
[1, ScanCode.ArrowDown, 'ArrowDown', KeyCode.DownArrow, 'DownArrow', 40, 'VK_DOWN', 'Down', empty],
585
>
[1, ScanCode.ArrowUp, 'ArrowUp', KeyCode.UpArrow, 'UpArrow', 38, 'VK_UP', 'Up', empty],
586
>
[1, ScanCode.NumLock, 'NumLock', KeyCode.NumLock, 'NumLock', 144, 'VK_NUMLOCK', empty, empty],
587
>
[1, ScanCode.NumpadDivide, 'NumpadDivide', KeyCode.NumpadDivide, 'NumPad_Divide', 111, 'VK_DIVIDE', empty, empty],
588
>
[1, ScanCode.NumpadMultiply, 'NumpadMultiply', KeyCode.NumpadMultiply, 'NumPad_Multiply', 106, 'VK_MULTIPLY', empty, empty],
589
>
[1, ScanCode.NumpadSubtract, 'NumpadSubtract', KeyCode.NumpadSubtract, 'NumPad_Subtract', 109, 'VK_SUBTRACT', empty, empty],
590
>
[1, ScanCode.NumpadAdd, 'NumpadAdd', KeyCode.NumpadAdd, 'NumPad_Add', 107, 'VK_ADD', empty, empty],
591
>
[1, ScanCode.NumpadEnter, 'NumpadEnter', KeyCode.Enter, empty, 0, empty, empty, empty],
592
>
[1, ScanCode.Numpad1, 'Numpad1', KeyCode.Numpad1, 'NumPad1', 97, 'VK_NUMPAD1', empty, empty],
593
>
[1, ScanCode.Numpad2, 'Numpad2', KeyCode.Numpad2, 'NumPad2', 98, 'VK_NUMPAD2', empty, empty],
594
>
[1, ScanCode.Numpad3, 'Numpad3', KeyCode.Numpad3, 'NumPad3', 99, 'VK_NUMPAD3', empty, empty],
595
>
[1, ScanCode.Numpad4, 'Numpad4', KeyCode.Numpad4, 'NumPad4', 100, 'VK_NUMPAD4', empty, empty],
596
>
[1, ScanCode.Numpad5, 'Numpad5', KeyCode.Numpad5, 'NumPad5', 101, 'VK_NUMPAD5', empty, empty],
597
>
[1, ScanCode.Numpad6, 'Numpad6', KeyCode.Numpad6, 'NumPad6', 102, 'VK_NUMPAD6', empty, empty],
598
>
[1, ScanCode.Numpad7, 'Numpad7', KeyCode.Numpad7, 'NumPad7', 103, 'VK_NUMPAD7', empty, empty],
599
>
[1, ScanCode.Numpad8, 'Numpad8', KeyCode.Numpad8, 'NumPad8', 104, 'VK_NUMPAD8', empty, empty],
600
>
[1, ScanCode.Numpad9, 'Numpad9', KeyCode.Numpad9, 'NumPad9', 105, 'VK_NUMPAD9', empty, empty],
601
>
[1, ScanCode.Numpad0, 'Numpad0', KeyCode.Numpad0, 'NumPad0', 96, 'VK_NUMPAD0', empty, empty],
602
>
[1, ScanCode.NumpadDecimal, 'NumpadDecimal', KeyCode.NumpadDecimal, 'NumPad_Decimal', 110, 'VK_DECIMAL', empty, empty],
603
>
[0, ScanCode.IntlBackslash, 'IntlBackslash', KeyCode.IntlBackslash, 'OEM_102', 226, 'VK_OEM_102', empty, empty],
604
>
[1, ScanCode.ContextMenu, 'ContextMenu', KeyCode.ContextMenu, 'ContextMenu', 93, empty, empty, empty],
605
>
[1, ScanCode.Power, 'Power', KeyCode.Unknown, empty, 0, empty, empty, empty],
606
>
[1, ScanCode.NumpadEqual, 'NumpadEqual', KeyCode.Unknown, empty, 0, empty, empty, empty],
607
>
[1, ScanCode.F13, 'F13', KeyCode.F13, 'F13', 124, 'VK_F13', empty, empty],
608
>
[1, ScanCode.F14, 'F14', KeyCode.F14, 'F14', 125, 'VK_F14', empty, empty],
609
>
[1, ScanCode.F15, 'F15', KeyCode.F15, 'F15', 126, 'VK_F15', empty, empty],
610
>
[1, ScanCode.F16, 'F16', KeyCode.F16, 'F16', 127, 'VK_F16', empty, empty],
611
>
[1, ScanCode.F17, 'F17', KeyCode.F17, 'F17', 128, 'VK_F17', empty, empty],
612
>
[1, ScanCode.F18, 'F18', KeyCode.F18, 'F18', 129, 'VK_F18', empty, empty],
613
>
[1, ScanCode.F19, 'F19', KeyCode.F19, 'F19', 130, 'VK_F19', empty, empty],
614
>
[1, ScanCode.F20, 'F20', KeyCode.F20, 'F20', 131, 'VK_F20', empty, empty],
615
>
[1, ScanCode.F21, 'F21', KeyCode.F21, 'F21', 132, 'VK_F21', empty, empty],
616
>
[1, ScanCode.F22, 'F22', KeyCode.F22, 'F22', 133, 'VK_F22', empty, empty],
617
>
[1, ScanCode.F23, 'F23', KeyCode.F23, 'F23', 134, 'VK_F23', empty, empty],
618
>
[1, ScanCode.F24, 'F24', KeyCode.F24, 'F24', 135, 'VK_F24', empty, empty],
619
>
[1, ScanCode.Open, 'Open', KeyCode.Unknown, empty, 0, empty, empty, empty],
620
>
[1, ScanCode.Help, 'Help', KeyCode.Unknown, empty, 0, empty, empty, empty],
621
>
[1, ScanCode.Select, 'Select', KeyCode.Unknown, empty, 0, empty, empty, empty],
622
>
[1, ScanCode.Again, 'Again', KeyCode.Unknown, empty, 0, empty, empty, empty],
623
>
[1, ScanCode.Undo, 'Undo', KeyCode.Unknown, empty, 0, empty, empty, empty],
624
>
[1, ScanCode.Cut, 'Cut', KeyCode.Unknown, empty, 0, empty, empty, empty],
625
>
[1, ScanCode.Copy, 'Copy', KeyCode.Unknown, empty, 0, empty, empty, empty],
626
>
[1, ScanCode.Paste, 'Paste', KeyCode.Unknown, empty, 0, empty, empty, empty],
627
>
[1, ScanCode.Find, 'Find', KeyCode.Unknown, empty, 0, empty, empty, empty],
628
>
[1, ScanCode.AudioVolumeMute, 'AudioVolumeMute', KeyCode.AudioVolumeMute, 'AudioVolumeMute', 173, 'VK_VOLUME_MUTE', empty, empty],
629
>
[1, ScanCode.AudioVolumeUp, 'AudioVolumeUp', KeyCode.AudioVolumeUp, 'AudioVolumeUp', 175, 'VK_VOLUME_UP', empty, empty],
630
>
[1, ScanCode.AudioVolumeDown, 'AudioVolumeDown', KeyCode.AudioVolumeDown, 'AudioVolumeDown', 174, 'VK_VOLUME_DOWN', empty, empty],
631
>
[1, ScanCode.NumpadComma, 'NumpadComma', KeyCode.NUMPAD_SEPARATOR, 'NumPad_Separator', 108, 'VK_SEPARATOR', empty, empty],
632
>
[0, ScanCode.IntlRo, 'IntlRo', KeyCode.ABNT_C1, 'ABNT_C1', 193, 'VK_ABNT_C1', empty, empty],
633
>
[1, ScanCode.KanaMode, 'KanaMode', KeyCode.Unknown, empty, 0, empty, empty, empty],
634
>
[0, ScanCode.IntlYen, 'IntlYen', KeyCode.Unknown, empty, 0, empty, empty, empty],
635
>
[1, ScanCode.Convert, 'Convert', KeyCode.Unknown, empty, 0, empty, empty, empty],
636
>
[1, ScanCode.NonConvert, 'NonConvert', KeyCode.Unknown, empty, 0, empty, empty, empty],
637
>
[1, ScanCode.Lang1, 'Lang1', KeyCode.Unknown, empty, 0, empty, empty, empty],
638
>
[1, ScanCode.Lang2, 'Lang2', KeyCode.Unknown, empty, 0, empty, empty, empty],
639
>
[1, ScanCode.Lang3, 'Lang3', KeyCode.Unknown, empty, 0, empty, empty, empty],
640
>
[1, ScanCode.Lang4, 'Lang4', KeyCode.Unknown, empty, 0, empty, empty, empty],
641
>
[1, ScanCode.Lang5, 'Lang5', KeyCode.Unknown, empty, 0, empty, empty, empty],
642
>
[1, ScanCode.Abort, 'Abort', KeyCode.Unknown, empty, 0, empty, empty, empty],
643
>
[1, ScanCode.Props, 'Props', KeyCode.Unknown, empty, 0, empty, empty, empty],
644
>
[1, ScanCode.NumpadParenLeft, 'NumpadParenLeft', KeyCode.Unknown, empty, 0, empty, empty, empty],
645
>
[1, ScanCode.NumpadParenRight, 'NumpadParenRight', KeyCode.Unknown, empty, 0, empty, empty, empty],
646
>
[1, ScanCode.NumpadBackspace, 'NumpadBackspace', KeyCode.Unknown, empty, 0, empty, empty, empty],
647
>
[1, ScanCode.NumpadMemoryStore, 'NumpadMemoryStore', KeyCode.Unknown, empty, 0, empty, empty, empty],
648
>
[1, ScanCode.NumpadMemoryRecall, 'NumpadMemoryRecall', KeyCode.Unknown, empty, 0, empty, empty, empty],
649
>
[1, ScanCode.NumpadMemoryClear, 'NumpadMemoryClear', KeyCode.Unknown, empty, 0, empty, empty, empty],
650
>
[1, ScanCode.NumpadMemoryAdd, 'NumpadMemoryAdd', KeyCode.Unknown, empty, 0, empty, empty, empty],
651
>
[1, ScanCode.NumpadMemorySubtract, 'NumpadMemorySubtract', KeyCode.Unknown, empty, 0, empty, empty, empty],
652
>
[1, ScanCode.NumpadClear, 'NumpadClear', KeyCode.Clear, 'Clear', 12, 'VK_CLEAR', empty, empty],
653
>
[1, ScanCode.NumpadClearEntry, 'NumpadClearEntry', KeyCode.Unknown, empty, 0, empty, empty, empty],
654
>
[1, ScanCode.None, empty, KeyCode.Ctrl, 'Ctrl', 17, 'VK_CONTROL', empty, empty],
655
>
[1, ScanCode.None, empty, KeyCode.Shift, 'Shift', 16, 'VK_SHIFT', empty, empty],
656
>
[1, ScanCode.None, empty, KeyCode.Alt, 'Alt', 18, 'VK_MENU', empty, empty],
657
>
[1, ScanCode.None, empty, KeyCode.Meta, 'Meta', 91, 'VK_COMMAND', empty, empty],
658
>
[1, ScanCode.ControlLeft, 'ControlLeft', KeyCode.Ctrl, empty, 0, 'VK_LCONTROL', empty, empty],
659
>
[1, ScanCode.ShiftLeft, 'ShiftLeft', KeyCode.Shift, empty, 0, 'VK_LSHIFT', empty, empty],
660
>
[1, ScanCode.AltLeft, 'AltLeft', KeyCode.Alt, empty, 0, 'VK_LMENU', empty, empty],
661
>
[1, ScanCode.MetaLeft, 'MetaLeft', KeyCode.Meta, empty, 0, 'VK_LWIN', empty, empty],
662
>
[1, ScanCode.ControlRight, 'ControlRight', KeyCode.Ctrl, empty, 0, 'VK_RCONTROL', empty, empty],
663
>
[1, ScanCode.ShiftRight, 'ShiftRight', KeyCode.Shift, empty, 0, 'VK_RSHIFT', empty, empty],
664
>
[1, ScanCode.AltRight, 'AltRight', KeyCode.Alt, empty, 0, 'VK_RMENU', empty, empty],
665
>
[1, ScanCode.MetaRight, 'MetaRight', KeyCode.Meta, empty, 0, 'VK_RWIN', empty, empty],
666
>
[1, ScanCode.BrightnessUp, 'BrightnessUp', KeyCode.Unknown, empty, 0, empty, empty, empty],
667
>
[1, ScanCode.BrightnessDown, 'BrightnessDown', KeyCode.Unknown, empty, 0, empty, empty, empty],
668
>
[1, ScanCode.MediaPlay, 'MediaPlay', KeyCode.Unknown, empty, 0, empty, empty, empty],
669
>
[1, ScanCode.MediaRecord, 'MediaRecord', KeyCode.Unknown, empty, 0, empty, empty, empty],
670
>
[1, ScanCode.MediaFastForward, 'MediaFastForward', KeyCode.Unknown, empty, 0, empty, empty, empty],
671
>
[1, ScanCode.MediaRewind, 'MediaRewind', KeyCode.Unknown, empty, 0, empty, empty, empty],
672
>
[1, ScanCode.MediaTrackNext, 'MediaTrackNext', KeyCode.MediaTrackNext, 'MediaTrackNext', 176, 'VK_MEDIA_NEXT_TRACK', empty, empty],
673
>
[1, ScanCode.MediaTrackPrevious, 'MediaTrackPrevious', KeyCode.MediaTrackPrevious, 'MediaTrackPrevious', 177, 'VK_MEDIA_PREV_TRACK', empty, empty],
674
>
[1, ScanCode.MediaStop, 'MediaStop', KeyCode.MediaStop, 'MediaStop', 178, 'VK_MEDIA_STOP', empty, empty],
675
>
[1, ScanCode.Eject, 'Eject', KeyCode.Unknown, empty, 0, empty, empty, empty],
676
>
[1, ScanCode.MediaPlayPause, 'MediaPlayPause', KeyCode.MediaPlayPause, 'MediaPlayPause', 179, 'VK_MEDIA_PLAY_PAUSE', empty, empty],
677
>
[1, ScanCode.MediaSelect, 'MediaSelect', KeyCode.LaunchMediaPlayer, 'LaunchMediaPlayer', 181, 'VK_MEDIA_LAUNCH_MEDIA_SELECT', empty, empty],
678
>
[1, ScanCode.LaunchMail, 'LaunchMail', KeyCode.LaunchMail, 'LaunchMail', 180, 'VK_MEDIA_LAUNCH_MAIL', empty, empty],
679
>
[1, ScanCode.LaunchApp2, 'LaunchApp2', KeyCode.LaunchApp2, 'LaunchApp2', 183, 'VK_MEDIA_LAUNCH_APP2', empty, empty],
680
>
[1, ScanCode.LaunchApp1, 'LaunchApp1', KeyCode.Unknown, empty, 0, 'VK_MEDIA_LAUNCH_APP1', empty, empty],
681
>
[1, ScanCode.SelectTask, 'SelectTask', KeyCode.Unknown, empty, 0, empty, empty, empty],
682
>
[1, ScanCode.LaunchScreenSaver, 'LaunchScreenSaver', KeyCode.Unknown, empty, 0, empty, empty, empty],
683
>
[1, ScanCode.BrowserSearch, 'BrowserSearch', KeyCode.BrowserSearch, 'BrowserSearch', 170, 'VK_BROWSER_SEARCH', empty, empty],
684
>
[1, ScanCode.BrowserHome, 'BrowserHome', KeyCode.BrowserHome, 'BrowserHome', 172, 'VK_BROWSER_HOME', empty, empty],
685
>
[1, ScanCode.BrowserBack, 'BrowserBack', KeyCode.BrowserBack, 'BrowserBack', 166, 'VK_BROWSER_BACK', empty, empty],
686
>
[1, ScanCode.BrowserForward, 'BrowserForward', KeyCode.BrowserForward, 'BrowserForward', 167, 'VK_BROWSER_FORWARD', empty, empty],
687
>
[1, ScanCode.BrowserStop, 'BrowserStop', KeyCode.Unknown, empty, 0, 'VK_BROWSER_STOP', empty, empty],
688
>
[1, ScanCode.BrowserRefresh, 'BrowserRefresh', KeyCode.Unknown, empty, 0, 'VK_BROWSER_REFRESH', empty, empty],
689
>
[1, ScanCode.BrowserFavorites, 'BrowserFavorites', KeyCode.Unknown, empty, 0, 'VK_BROWSER_FAVORITES', empty, empty],
690
>
[1, ScanCode.ZoomToggle, 'ZoomToggle', KeyCode.Unknown, empty, 0, empty, empty, empty],
691
>
[1, ScanCode.MailReply, 'MailReply', KeyCode.Unknown, empty, 0, empty, empty, empty],
692
>
[1, ScanCode.MailForward, 'MailForward', KeyCode.Unknown, empty, 0, empty, empty, empty],
693
>
[1, ScanCode.MailSend, 'MailSend', KeyCode.Unknown, empty, 0, empty, empty, empty],
694
>
695
>
// See https://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html
696
>
// If an Input Method Editor is processing key input and the event is keydown, return 229.
697
>
[1, ScanCode.None, empty, KeyCode.KEY_IN_COMPOSITION, 'KeyInComposition', 229, empty, empty, empty],
698
>
[1, ScanCode.None, empty, KeyCode.ABNT_C2, 'ABNT_C2', 194, 'VK_ABNT_C2', empty, empty],
699
>
[1, ScanCode.None, empty, KeyCode.OEM_8, 'OEM_8', 223, 'VK_OEM_8', empty, empty],
700
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_KANA', empty, empty],
701
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_HANGUL', empty, empty],
702
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_JUNJA', empty, empty],
703
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_FINAL', empty, empty],
704
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_HANJA', empty, empty],
705
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_KANJI', empty, empty],
706
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_CONVERT', empty, empty],
707
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_NONCONVERT', empty, empty],
708
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_ACCEPT', empty, empty],
709
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_MODECHANGE', empty, empty],
710
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_SELECT', empty, empty],
711
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PRINT', empty, empty],
712
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_EXECUTE', empty, empty],
713
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_SNAPSHOT', empty, empty],
714
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_HELP', empty, empty],
715
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_APPS', empty, empty],
716
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PROCESSKEY', empty, empty],
717
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PACKET', empty, empty],
718
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_DBE_SBCSCHAR', empty, empty],
719
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_DBE_DBCSCHAR', empty, empty],
720
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_ATTN', empty, empty],
721
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_CRSEL', empty, empty],
722
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_EXSEL', empty, empty],
723
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_EREOF', empty, empty],
724
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PLAY', empty, empty],
725
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_ZOOM', empty, empty],
726
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_NONAME', empty, empty],
727
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PA1', empty, empty],
728
>
[1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_OEM_CLEAR', empty, empty],
729
>
];
730
>
731
>
const seenKeyCode: boolean[] = [];
732
>
const seenScanCode: boolean[] = [];
733
>
for (const mapping of mappings) {
734
>
const [immutable, scanCode, scanCodeStr, keyCode, keyCodeStr, eventKeyCode, vkey, usUserSettingsLabel, generalUserSettingsLabel] = mapping;
735
>
if (!seenScanCode[scanCode]) {
736
>
seenScanCode[scanCode] = true;
737
>
scanCodeIntToStr[scanCode] = scanCodeStr;
738
>
scanCodeStrToInt[scanCodeStr] = scanCode;
739
>
scanCodeLowerCaseStrToInt[scanCodeStr.toLowerCase()] = scanCode;
740
>
if (immutable) {
741
>
IMMUTABLE_CODE_TO_KEY_CODE[scanCode] = keyCode;
742
>
if ((keyCode !== KeyCode.Unknown) && (keyCode !== KeyCode.Enter) && !isModifierKey(keyCode)) {
743
>
IMMUTABLE_KEY_CODE_TO_CODE[keyCode] = scanCode;
744
>
}
745
>
}
746
>
}
747
>
if (!seenKeyCode[keyCode]) {
748
>
seenKeyCode[keyCode] = true;
749
>
if (!keyCodeStr) {
750
throw new Error(`String representation missing for key code ${keyCode} around scan code ${scanCodeStr}`);
751
}
753
>
userSettingsUSMap.define(keyCode, usUserSettingsLabel || keyCodeStr);
754
>
userSettingsGeneralMap.define(keyCode, generalUserSettingsLabel || usUserSettingsLabel || keyCodeStr);
755
>
}
756
>
if (eventKeyCode) {
757
>
EVENT_KEY_CODE_MAP[eventKeyCode] = keyCode;
758
>
}
759
>
if (scanCodeStr) {
760
>
SCAN_CODE_STR_TO_EVENT_KEY_CODE[scanCodeStr] = eventKeyCode;
761
>
}
762
>
if (vkey) {
763
>
NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE[vkey] = keyCode;
764
>
}
765
>
}
766
>
// Manually added due to the exclusion above (due to duplication with NumpadEnter)
767
>
IMMUTABLE_KEY_CODE_TO_CODE[KeyCode.Enter] = ScanCode.Enter;
768
>
769
>
})();
770
>
771
>
export namespace KeyCodeUtils {
772
>
export function toString(keyCode: KeyCode): string {
773
return uiMap.keyCodeToStr(keyCode);
774
}
776
return uiMap.strToKeyCode(key);
777
}
779
>
export function toUserSettingsUS(keyCode: KeyCode): string {
781
>
}
783
return userSettingsGeneralMap.keyCodeToStr(keyCode);
784
}
786
return userSettingsUSMap.strToKeyCode(key) || userSettingsGeneralMap.strToKeyCode(key);
787
}
789
>
export function toElectronAccelerator(keyCode: KeyCode): string | null {
790
if (keyCode >= KeyCode.Numpad0 && keyCode <= KeyCode.NumpadDivide) {
791
// [Electron Accelerators] Electron is able to parse numpad keys, but unfortunately it