// Maps browser KeyboardEvent.code values to Windows virtual-key codes. // Reference: https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes const VK = {}; // Letters (KeyA..KeyZ -> 0x41..0x5A) for (let i = 0; i < 26; i++) VK['Key' + String.fromCharCode(65 + i)] = 0x41 + i; // Top-row digits (Digit0..Digit9 -> 0x30..0x39) for (let i = 0; i <= 9; i++) VK['Digit' + i] = 0x30 + i; // Numpad digits for (let i = 0; i <= 9; i++) VK['Numpad' + i] = 0x60 + i; // Function keys for (let i = 1; i <= 24; i++) VK['F' + i] = 0x70 + (i - 1); Object.assign(VK, { Escape: 0x1b, Tab: 0x09, CapsLock: 0x14, ShiftLeft: 0xa0, ShiftRight: 0xa1, ControlLeft: 0xa2, ControlRight: 0xa3, AltLeft: 0xa4, AltRight: 0xa5, MetaLeft: 0x5b, MetaRight: 0x5c, ContextMenu: 0x5d, Space: 0x20, Enter: 0x0d, NumpadEnter: 0x0d, Backspace: 0x08, Delete: 0x2e, Insert: 0x2d, Home: 0x24, End: 0x23, PageUp: 0x21, PageDown: 0x22, ArrowUp: 0x26, ArrowDown: 0x28, ArrowLeft: 0x25, ArrowRight: 0x27, PrintScreen: 0x2c, ScrollLock: 0x91, Pause: 0x13, NumLock: 0x90, // OEM punctuation (US layout) Semicolon: 0xba, Equal: 0xbb, Comma: 0xbc, Minus: 0xbd, Period: 0xbe, Slash: 0xbf, Backquote: 0xc0, BracketLeft: 0xdb, Backslash: 0xdc, BracketRight: 0xdd, Quote: 0xde, // Numpad operators NumpadMultiply: 0x6a, NumpadAdd: 0x6b, NumpadSubtract: 0x6d, NumpadDecimal: 0x6e, NumpadDivide: 0x6f, }); /** @param {string} code KeyboardEvent.code @returns {number|undefined} Windows VK code */ function toVirtualKey(code) { return VK[code]; } module.exports = { toVirtualKey, VK };