---From https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes.
---@enum Keys
local Keys = {
    KEY_LBUTTON = 0x01, -- Left mouse button
    KEY_RBUTTON = 0x02, -- Right mouse button
    KEY_CANCEL = 0x03, -- Control-break processing
    KEY_MBUTTON = 0x04, -- Middle mouse button
    KEY_XBUTTON1 = 0x05, -- X1 mouse button
    KEY_XBUTTON2 = 0x06, -- X2 mouse button
    KEY_BACK = 0x08, -- Backspace key
    KEY_TAB = 0x09, -- Tab key
    KEY_CLEAR = 0x0C, -- Clear key
    KEY_RETURN = 0x0D, -- Enter key
    KEY_SHIFT = 0x10, -- Shift key
    KEY_CONTROL = 0x11, -- Ctrl key
    KEY_MENU = 0x12, -- Alt key
    KEY_PAUSE = 0x13, -- Pause key
    KEY_CAPITAL = 0x14, -- Caps lock key
    KEY_KANA = 0x15, -- IME Kana mode
    KEY_HANGUL = 0x15, -- IME Hangul mode
    KEY_IME_ON = 0x16, -- IME On
    KEY_JUNJA = 0x17, -- IME Junja mode
    KEY_FINAL = 0x18, -- IME final mode
    KEY_HANJA = 0x19, -- IME Hanja mode
    KEY_KANJI = 0x19, -- IME Kanji mode
    KEY_IME_OFF = 0x1A, -- IME Off
    KEY_ESCAPE = 0x1B, -- Esc key
    KEY_CONVERT = 0x1C, -- IME convert
    KEY_NONCONVERT = 0x1D, -- IME nonconvert
    KEY_ACCEPT = 0x1E, -- IME accept
    KEY_MODECHANGE = 0x1F, -- IME mode change request
    KEY_SPACE = 0x20, -- Spacebar key
    KEY_PRIOR = 0x21, -- Page up key
    KEY_NEXT = 0x22, -- Page down key
    KEY_END = 0x23, -- End key
    KEY_HOME = 0x24, -- Home key
    KEY_LEFT = 0x25, -- Left arrow key
    KEY_UP = 0x26, -- Up arrow key
    KEY_RIGHT = 0x27, -- Right arrow key
    KEY_DOWN = 0x28, -- Down arrow key
    KEY_SELECT = 0x29, -- Select key
    KEY_PRINT = 0x2A, -- Print key
    KEY_EXECUTE = 0x2B, -- Execute key
    KEY_SNAPSHOT = 0x2C, -- Print screen key
    KEY_INSERT = 0x2D, -- Insert key
    KEY_DELETE = 0x2E, -- Delete key
    KEY_HELP = 0x2F, -- Help key
    KEY_0 = 0x30, -- 0 key
    KEY_1 = 0x31, -- 1 key
    KEY_2 = 0x32, -- 2 key
    KEY_3 = 0x33, -- 3 key
    KEY_4 = 0x34, -- 4 key
    KEY_5 = 0x35, -- 5 key
    KEY_6 = 0x36, -- 6 key
    KEY_7 = 0x37, -- 7 key
    KEY_8 = 0x38, -- 8 key
    KEY_9 = 0x39, -- 9 key
    KEY_A = 0x41, -- A key
    KEY_B = 0x42, -- B key
    KEY_C = 0x43, -- C key
    KEY_D = 0x44, -- D key
    KEY_E = 0x45, -- E key
    KEY_F = 0x46, -- F key
    KEY_G = 0x47, -- G key
    KEY_H = 0x48, -- H key
    KEY_I = 0x49, -- I key
    KEY_J = 0x4A, -- J key
    KEY_K = 0x4B, -- K key
    KEY_L = 0x4C, -- L key
    KEY_M = 0x4D, -- M key
    KEY_N = 0x4E, -- N key
    KEY_O = 0x4F, -- O key
    KEY_P = 0x50, -- P key
    KEY_Q = 0x51, -- Q key
    KEY_R = 0x52, -- R key
    KEY_S = 0x53, -- S key
    KEY_T = 0x54, -- T key
    KEY_U = 0x55, -- U key
    KEY_V = 0x56, -- V key
    KEY_W = 0x57, -- W key
    KEY_X = 0x58, -- X key
    KEY_Y = 0x59, -- Y key
    KEY_Z = 0x5A, -- Z key
    KEY_LWIN = 0x5B, -- Left Windows logo key
    KEY_RWIN = 0x5C, -- Right Windows logo key
    KEY_APPS = 0x5D, -- Application key
    KEY_SLEEP = 0x5F, -- Computer Sleep key
    KEY_NUMPAD0 = 0x60, -- Numeric keypad 0 key
    KEY_NUMPAD1 = 0x61, -- Numeric keypad 1 key
    KEY_NUMPAD2 = 0x62, -- Numeric keypad 2 key
    KEY_NUMPAD3 = 0x63, -- Numeric keypad 3 key
    KEY_NUMPAD4 = 0x64, -- Numeric keypad 4 key
    KEY_NUMPAD5 = 0x65, -- Numeric keypad 5 key
    KEY_NUMPAD6 = 0x66, -- Numeric keypad 6 key
    KEY_NUMPAD7 = 0x67, -- Numeric keypad 7 key
    KEY_NUMPAD8 = 0x68, -- Numeric keypad 8 key
    KEY_NUMPAD9 = 0x69, -- Numeric keypad 9 key
    KEY_MULTIPLY = 0x6A, -- Multiply key
    KEY_ADD = 0x6B, -- Add key
    KEY_SEPARATOR = 0x6C, -- Separator key
    KEY_SUBTRACT = 0x6D, -- Subtract key
    KEY_DECIMAL = 0x6E, -- Decimal key
    KEY_DIVIDE = 0x6F, -- Divide key
    KEY_F1 = 0x70, -- F1 key
    KEY_F2 = 0x71, -- F2 key
    KEY_F3 = 0x72, -- F3 key
    KEY_F4 = 0x73, -- F4 key
    KEY_F5 = 0x74, -- F5 key
    KEY_F6 = 0x75, -- F6 key
    KEY_F7 = 0x76, -- F7 key
    KEY_F8 = 0x77, -- F8 key
    KEY_F9 = 0x78, -- F9 key
    KEY_F10 = 0x79, -- F10 key
    KEY_F11 = 0x7A, -- F11 key
    KEY_F12 = 0x7B, -- F12 key
    KEY_F13 = 0x7C, -- F13 key
    KEY_F14 = 0x7D, -- F14 key
    KEY_F15 = 0x7E, -- F15 key
    KEY_F16 = 0x7F, -- F16 key
    KEY_F17 = 0x80, -- F17 key
    KEY_F18 = 0x81, -- F18 key
    KEY_F19 = 0x82, -- F19 key
    KEY_F20 = 0x83, -- F20 key
    KEY_F21 = 0x84, -- F21 key
    KEY_F22 = 0x85, -- F22 key
    KEY_F23 = 0x86, -- F23 key
    KEY_F24 = 0x87, -- F24 key
    KEY_NUMLOCK = 0x90, -- Num lock key
    KEY_SCROLL = 0x91, -- Scroll lock key
    KEY_LSHIFT = 0xA0, -- Left Shift key
    KEY_RSHIFT = 0xA1, -- Right Shift key
    KEY_LCONTROL = 0xA2, -- Left Ctrl key
    KEY_RCONTROL = 0xA3, -- Right Ctrl key
    KEY_LMENU = 0xA4, -- Left Alt key
    KEY_RMENU = 0xA5, -- Right Alt key
    KEY_BROWSER_BACK = 0xA6, -- Browser Back key
    KEY_BROWSER_FORWARD = 0xA7, -- Browser Forward key
    KEY_BROWSER_REFRESH = 0xA8, -- Browser Refresh key
    KEY_BROWSER_STOP = 0xA9, -- Browser Stop key
    KEY_BROWSER_SEARCH = 0xAA, -- Browser Search key
    KEY_BROWSER_FAVORITES = 0xAB, -- Browser Favorites key
    KEY_BROWSER_HOME = 0xAC, -- Browser Start and Home key
    KEY_VOLUME_MUTE = 0xAD, -- Volume Mute key
    KEY_VOLUME_DOWN = 0xAE, -- Volume Down key
    KEY_VOLUME_UP = 0xAF, -- Volume Up key
    KEY_MEDIA_NEXT_TRACK = 0xB0, -- Next Track key
    KEY_MEDIA_PREV_TRACK = 0xB1, -- Previous Track key
    KEY_MEDIA_STOP = 0xB2, -- Stop Media key
    KEY_MEDIA_PLAY_PAUSE = 0xB3, -- Play/Pause Media key
    KEY_LAUNCH_MAIL = 0xB4, -- Start Mail key
    KEY_LAUNCH_MEDIA_SELECT = 0xB5, -- Select Media key
    KEY_LAUNCH_APP1 = 0xB6, -- Start Application 1 key
    KEY_LAUNCH_APP2 = 0xB7, -- Start Application 2 key
    KEY_OEM_1 = 0xBA, -- It can vary by keyboard. For the US ANSI keyboard , the Semiсolon and Colon key
    KEY_OEM_PLUS = 0xBB, -- For any country/region, the Equals and Plus key
    KEY_OEM_COMMA = 0xBC, -- For any country/region, the Comma and Less Than key
    KEY_OEM_MINUS = 0xBD, -- For any country/region, the Dash and Underscore key
    KEY_OEM_PERIOD = 0xBE, -- For any country/region, the Period and Greater Than key
    KEY_OEM_2 = 0xBF, -- It can vary by keyboard. For the US ANSI keyboard, the Forward Slash and Question Mark key
    KEY_OEM_3 = 0xC0, -- It can vary by keyboard. For the US ANSI keyboard, the Grave Accent and Tilde key
    KEY_GAMEPAD_A = 0xC3, -- Gamepad A button
    KEY_GAMEPAD_B = 0xC4, -- Gamepad B button
    KEY_GAMEPAD_X = 0xC5, -- Gamepad X button
    KEY_GAMEPAD_Y = 0xC6, -- Gamepad Y button
    KEY_GAMEPAD_RIGHT_SHOULDER = 0xC7, -- Gamepad Right Shoulder button
    KEY_GAMEPAD_LEFT_SHOULDER = 0xC8, -- Gamepad Left Shoulder button
    KEY_GAMEPAD_LEFT_TRIGGER = 0xC9, -- Gamepad Left Trigger button
    KEY_GAMEPAD_RIGHT_TRIGGER = 0xCA, -- Gamepad Right Trigger button
    KEY_GAMEPAD_DPAD_UP = 0xCB, -- Gamepad D-pad Up button
    KEY_GAMEPAD_DPAD_DOWN = 0xCC, -- Gamepad D-pad Down button
    KEY_GAMEPAD_DPAD_LEFT = 0xCD, -- Gamepad D-pad Left button
    KEY_GAMEPAD_DPAD_RIGHT = 0xCE, -- Gamepad D-pad Right button
    KEY_GAMEPAD_MENU = 0xCF, -- Gamepad Menu/Start button
    KEY_GAMEPAD_VIEW = 0xD0, -- Gamepad View/Back button
    KEY_GAMEPAD_LEFT_THUMBSTICK_BUTTON = 0xD1, -- Gamepad Left Thumbstick button
    KEY_GAMEPAD_RIGHT_THUMBSTICK_BUTTON = 0xD2, -- Gamepad Right Thumbstick button
    KEY_GAMEPAD_LEFT_THUMBSTICK_UP = 0xD3, -- Gamepad Left Thumbstick up
    KEY_GAMEPAD_LEFT_THUMBSTICK_DOWN = 0xD4, -- Gamepad Left Thumbstick down
    KEY_GAMEPAD_LEFT_THUMBSTICK_RIGHT = 0xD5, -- Gamepad Left Thumbstick right
    KEY_GAMEPAD_LEFT_THUMBSTICK_LEFT = 0xD6, -- Gamepad Left Thumbstick left
    KEY_GAMEPAD_RIGHT_THUMBSTICK_UP = 0xD7, -- Gamepad Right Thumbstick up
    KEY_GAMEPAD_RIGHT_THUMBSTICK_DOWN = 0xD8, -- Gamepad Right Thumbstick down
    KEY_GAMEPAD_RIGHT_THUMBSTICK_RIGHT = 0xD9, -- Gamepad Right Thumbstick right
    KEY_GAMEPAD_RIGHT_THUMBSTICK_LEFT = 0xDA, -- Gamepad Right Thumbstick left
    KEY_OEM_4 = 0xDB, -- It can vary by keyboard. For the US ANSI keyboard, the Left Brace key
    KEY_OEM_5 = 0xDC, -- It can vary by keyboard. For the US ANSI keyboard, the Backslash and Pipe key
    KEY_OEM_6 = 0xDD, -- It can vary by keyboard. For the US ANSI keyboard, the Right Brace key
    KEY_OEM_7 = 0xDE, -- It can vary by keyboard. For the US ANSI keyboard, the Apostrophe and Double Quotation Mark key
    KEY_OEM_8 = 0xDF, -- It can vary by keyboard. For the Canadian CSA keyboard, the Right Ctrl key
    KEY_OEM_102 = 0xE2, -- It can vary by keyboard. For the European ISO keyboard, the Backslash and Pipe key
    KEY_PROCESSKEY = 0xE5, -- IME PROCESS key
    KEY_PACKET = 0xE7, -- Used to pass Unicode characters as if they were keystrokes. The KEY_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP
    KEY_ATTN = 0xF6, -- Attn key
    KEY_CRSEL = 0xF7, -- CrSel key
    KEY_EXSEL = 0xF8, -- ExSel key
    KEY_EREOF = 0xF9, -- Erase EOF key
    KEY_PLAY = 0xFA, -- Play key
    KEY_ZOOM = 0xFB, -- Zoom key
    KEY_NONAME = 0xFC, -- Reserved
    KEY_PA1 = 0xFD, -- PA1 key
    KEY_OEM_CLEAR = 0xFE -- Clear key
}

return {
    Keys = Keys
}