#pragma once #include "stdafx.h" #include "..\Core\IKeyManager.h" #include "GamePad.h" struct KeyDefinition { string name; uint32_t keyCode; string description; }; const KeyDefinition _keyDefinitions[] = { //{ "VK_LBUTTON", 0x01, "Left mouse button" }, //{ "VK_RBUTTON", 0x02, "Right mouse button" }, { "VK_CANCEL", 0x03, "Control-break processing" }, //{ "VK_MBUTTON", 0x04, "Middle mouse button (three-button mouse)" }, //{ "VK_XBUTTON1", 0x05, "X1 mouse button" }, //{ "VK_XBUTTON2", 0x06, "X2 mouse button" }, { "-", 0x07, "Undefined" }, { "VK_BACK", 0x08, "Backspace" }, { "VK_TAB", 0x09, "Tab" }, //{ "-", 0x0A - 0B, "Reserved" }, { "VK_CLEAR", 0x0C, "Clear" }, { "VK_RETURN", 0x0D, "Enter" }, //{ "-", 0x0E - 0F, "Undefined" }, { "VK_SHIFT", 0x10, "Shift" }, { "VK_CONTROL", 0x11, "Ctrl" }, { "VK_MENU", 0x12, "Alt" }, { "VK_PAUSE", 0x13, "Pause" }, { "VK_CAPITAL", 0x14, "Caps Lock" }, { "VK_KANA", 0x15, "IME Kana mode" }, { "VK_HANGUEL", 0x15, "IME Hanguel mode" }, { "VK_HANGUL", 0x15, "IME Hangul mode" }, //{ "-", 0x16, "Undefined" }, { "VK_JUNJA", 0x17, "IME Junja mode" }, { "VK_FINAL", 0x18, "IME final mode" }, { "VK_HANJA", 0x19, "IME Hanja mode" }, { "VK_KANJI", 0x19, "IME Kanji mode" }, //{ "-", 0x1A, "Undefined" }, { "VK_ESCAPE", 0x1B, "Esc" }, { "VK_CONVERT", 0x1C, "IME convert" }, { "VK_NONCONVERT", 0x1D, "IME nonconvert" }, { "VK_ACCEPT", 0x1E, "IME accept" }, { "VK_MODECHANGE", 0x1F, "IME mode change request" }, { "VK_SPACE", 0x20, "Spacebar" }, { "VK_PRIOR", 0x21, "Page Up" }, { "VK_NEXT", 0x22, "Page Down" }, { "VK_END", 0x23, "End" }, { "VK_HOME", 0x24, "Home" }, { "VK_LEFT", 0x25, "Left Arrow" }, { "VK_UP", 0x26, "Up Arrow" }, { "VK_RIGHT", 0x27, "Right Arrow" }, { "VK_DOWN", 0x28, "Down Arrow" }, { "VK_SELECT", 0x29, "Select" }, { "VK_PRINT", 0x2A, "Print" }, { "VK_EXECUTE", 0x2B, "Execute" }, { "VK_SNAPSHOT", 0x2C, "Print Screen" }, { "VK_INSERT", 0x2D, "Ins" }, { "VK_DELETE", 0x2E, "Del" }, { "VK_HELP", 0x2F, "Help" }, { "0", 0x30, "0" }, { "1", 0x31, "1" }, { "2", 0x32, "2" }, { "3", 0x33, "3" }, { "4", 0x34, "4" }, { "5", 0x35, "5" }, { "6", 0x36, "6" }, { "7", 0x37, "7" }, { "8", 0x38, "8" }, { "9", 0x39, "9" }, //{ "undefined", 0x3A - 40, "undefined" }, { "A", 0x41, "A" }, { "B", 0x42, "B" }, { "C", 0x43, "C" }, { "D", 0x44, "D" }, { "E", 0x45, "E" }, { "F", 0x46, "F" }, { "G", 0x47, "G" }, { "H", 0x48, "H" }, { "I", 0x49, "I" }, { "J", 0x4A, "J" }, { "K", 0x4B, "K" }, { "L", 0x4C, "L" }, { "M", 0x4D, "M" }, { "N", 0x4E, "N" }, { "O", 0x4F, "O" }, { "P", 0x50, "P" }, { "Q", 0x51, "Q" }, { "R", 0x52, "R" }, { "S", 0x53, "S" }, { "T", 0x54, "T" }, { "U", 0x55, "U" }, { "V", 0x56, "V" }, { "W", 0x57, "W" }, { "X", 0x58, "X" }, { "Y", 0x59, "Y" }, { "Z", 0x5A, "Z" }, { "VK_LWIN", 0x5B, "Left Windows" }, { "VK_RWIN", 0x5C, "Right Windows" }, { "VK_APPS", 0x5D, "Applications Key" }, //{ "-", 0x5E, "Reserved" }, { "VK_SLEEP", 0x5F, "Computer Sleep" }, { "VK_NUMPAD0", 0x60, "Keypad 0" }, { "VK_NUMPAD1", 0x61, "Keypad 1" }, { "VK_NUMPAD2", 0x62, "Keypad 2" }, { "VK_NUMPAD3", 0x63, "Keypad 3" }, { "VK_NUMPAD4", 0x64, "Keypad 4" }, { "VK_NUMPAD5", 0x65, "Keypad 5" }, { "VK_NUMPAD6", 0x66, "Keypad 6" }, { "VK_NUMPAD7", 0x67, "Keypad 7" }, { "VK_NUMPAD8", 0x68, "Keypad 8" }, { "VK_NUMPAD9", 0x69, "Keypad 9" }, { "VK_MULTIPLY", 0x6A, "Multiply" }, { "VK_ADD", 0x6B, "Add" }, { "VK_SEPARATOR", 0x6C, "Separator" }, { "VK_SUBTRACT", 0x6D, "Subtract" }, { "VK_DECIMAL", 0x6E, "Decimal" }, { "VK_DIVIDE", 0x6F, "Divide" }, { "VK_F1", 0x70, "F1" }, { "VK_F2", 0x71, "F2" }, { "VK_F3", 0x72, "F3" }, { "VK_F4", 0x73, "F4" }, { "VK_F5", 0x74, "F5" }, { "VK_F6", 0x75, "F6" }, { "VK_F7", 0x76, "F7" }, { "VK_F8", 0x77, "F8" }, { "VK_F9", 0x78, "F9" }, { "VK_F10", 0x79, "F10" }, { "VK_F11", 0x7A, "F11" }, { "VK_F12", 0x7B, "F12" }, { "VK_F13", 0x7C, "F13" }, { "VK_F14", 0x7D, "F14" }, { "VK_F15", 0x7E, "F15" }, { "VK_F16", 0x7F, "F16" }, { "VK_F17", 0x80, "F17" }, { "VK_F18", 0x81, "F18" }, { "VK_F19", 0x82, "F19" }, { "VK_F20", 0x83, "F20" }, { "VK_F21", 0x84, "F21" }, { "VK_F22", 0x85, "F22" }, { "VK_F23", 0x86, "F23" }, { "VK_F24", 0x87, "F24" }, //{ "-", 0x88 - 8F, "Unassigned" }, { "VK_NUMLOCK", 0x90, "Num Lock" }, { "VK_SCROLL", 0x91, "Scroll Lock" }, //{"-", 0x92-96,"OEM specific"}, //{ "-", 0x97 - 9F, "Unassigned" }, { "VK_LSHIFT", 0xA0, "Left Shift" }, { "VK_RSHIFT", 0xA1, "Right Shift" }, { "VK_LCONTROL", 0xA2, "Left Control" }, { "VK_RCONTROL", 0xA3, "Right Control" }, { "VK_LMENU", 0xA4, "Left Menu" }, { "VK_RMENU", 0xA5, "Right Menu" }, { "VK_BROWSER_BACK", 0xA6, "Browser Back" }, { "VK_BROWSER_FORWARD", 0xA7, "Browser Forward" }, { "VK_BROWSER_REFRESH", 0xA8, "Browser Refresh" }, { "VK_BROWSER_STOP", 0xA9, "Browser Stop" }, { "VK_BROWSER_SEARCH", 0xAA, "Browser Search" }, { "VK_BROWSER_FAVORITES", 0xAB, "Browser Favorites" }, { "VK_BROWSER_HOME", 0xAC, "Browser Start and Home" }, { "VK_VOLUME_MUTE", 0xAD, "Volume Mute" }, { "VK_VOLUME_DOWN", 0xAE, "Volume Down" }, { "VK_VOLUME_UP", 0xAF, "Volume Up" }, { "VK_MEDIA_NEXT_TRACK", 0xB0, "Next Track" }, { "VK_MEDIA_PREV_TRACK", 0xB1, "Previous Track" }, { "VK_MEDIA_STOP", 0xB2, "Stop Media" }, { "VK_MEDIA_PLAY_PAUSE", 0xB3, "Play/Pause Media" }, { "VK_LAUNCH_MAIL", 0xB4, "Start Mail" }, { "VK_LAUNCH_MEDIA_SELECT", 0xB5, "Select Media" }, { "VK_LAUNCH_APP1", 0xB6, "Start Application 1" }, { "VK_LAUNCH_APP2", 0xB7, "Start Application 2" }, //{ "-", 0xB8 - B9, "Reserved" }, { "VK_OEM_1", 0xBA, "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the \';:\' key VK_OEM_PLUS" }, { "VK_OEM_PLUS", 0xBB, "+" }, { "VK_OEM_COMMA", 0xBC, "," }, { "VK_OEM_MINUS", 0xBD, "-" }, { "VK_OEM_PERIOD", 0xBE, "." }, { "VK_OEM_2", 0xBF, "/" }, { "VK_OEM_3", 0xC0, "`" }, //{ "-", 0xC1 - D7, "Reserved" }, //{ "-", 0xD8 - DA, "Unassigned" }, { "VK_OEM_4", 0xDB, "[" }, { "VK_OEM_5", 0xDC, "\\" }, { "VK_OEM_6", 0xDD, "]" }, { "VK_OEM_7", 0xDE, "'" }, { "VK_OEM_8", 0xDF, "Used for miscellaneous characters; it can vary by keyboard." }, //{ "-", 0xE0, "Reserved" }, //{ "-", 0xE1, "OEM specific" }, { "VK_OEM_102", 0xE2, "Either the angle bracket key or the backslash key on the RT 102-key keyboard" }, //{ "-", 0xE3 - E4, "OEM specific" }, { "VK_PROCESSKEY", 0xE5, "IME PROCESS" }, //{ "-", 0xE6, "OEM specific" }, { "VK_PACKET", 0xE7, "Used to pass Unicode characters as if they were keystrokes. The VK_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" }, //{ "-", 0xE8, "Unassigned" }, // {"-",0xE6,"OEM specific"}, { "VK_PACKET", 0xE7, "Used to pass Unicode characters as if they were keystrokes. The VK_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" }, // {"-",0xE8,"Unassigned"}, //{ "-", 0xE9 - F5, "OEM specific" }, { "VK_ATTN", 0xF6, "Attn" }, { "VK_CRSEL", 0xF7, "CrSel" }, { "VK_EXSEL", 0xF8, "ExSel" }, { "VK_EREOF", 0xF9, "Erase EOF" }, { "VK_PLAY", 0xFA, "Play" }, { "VK_ZOOM", 0xFB, "Zoom" }, { "VK_NONAME", 0xFC, "Reserved" }, { "VK_PA1", 0xFD, "PA1" }, { "VK_OEM_CLEAR", 0xFE, "Clear" }, { "", 0xFFFF + 0x01, "Pad1 Up" }, { "", 0xFFFF + 0x02, "Pad1 Down" }, { "", 0xFFFF + 0x03, "Pad1 Left" }, { "", 0xFFFF + 0x04, "Pad1 Right" }, { "", 0xFFFF + 0x05, "Pad1 Start" }, { "", 0xFFFF + 0x06, "Pad1 Back" }, { "", 0xFFFF + 0x07, "Pad1 L3" }, { "", 0xFFFF + 0x08, "Pad1 R3" }, { "", 0xFFFF + 0x09, "Pad1 L1" }, { "", 0xFFFF + 0x0A, "Pad1 R1" }, { "", 0xFFFF + 0x0D, "Pad1 A" }, { "", 0xFFFF + 0x0E, "Pad1 B" }, { "", 0xFFFF + 0x0F, "Pad1 X" }, { "", 0xFFFF + 0x10, "Pad1 Y" }, { "", 0xFFFF + 0x11, "Pad1 L2" }, { "", 0xFFFF + 0x12, "Pad1 R2" }, { "", 0xFFFF + 0x13, "Pad1 RT Up" }, { "", 0xFFFF + 0x14, "Pad1 RT Down" }, { "", 0xFFFF + 0x15, "Pad1 RT Left" }, { "", 0xFFFF + 0x16, "Pad1 RT Right" }, { "", 0xFFFF + 0x101, "Pad2 Up" }, { "", 0xFFFF + 0x102, "Pad2 Down" }, { "", 0xFFFF + 0x103, "Pad2 Left" }, { "", 0xFFFF + 0x104, "Pad2 Right" }, { "", 0xFFFF + 0x105, "Pad2 Start" }, { "", 0xFFFF + 0x106, "Pad2 Back" }, { "", 0xFFFF + 0x107, "Pad2 Left Thumb" }, { "", 0xFFFF + 0x108, "Pad2 Right Thumb" }, { "", 0xFFFF + 0x109, "Pad2 Left Bumper" }, { "", 0xFFFF + 0x10A, "Pad2 Right Bumper" }, { "", 0xFFFF + 0x10D, "Pad2 A" }, { "", 0xFFFF + 0x10E, "Pad2 B" }, { "", 0xFFFF + 0x10F, "Pad2 X" }, { "", 0xFFFF + 0x110, "Pad2 Y" }, { "", 0xFFFF + 0x111, "Pad2 L2" }, { "", 0xFFFF + 0x112, "Pad2 R2" }, { "", 0xFFFF + 0x113, "Pad2 RT Up" }, { "", 0xFFFF + 0x114, "Pad2 RT Down" }, { "", 0xFFFF + 0x115, "Pad2 RT Left" }, { "", 0xFFFF + 0x116, "Pad2 RT Right" }, { "", 0xFFFF + 0x201, "Pad3 Up" }, { "", 0xFFFF + 0x202, "Pad3 Down" }, { "", 0xFFFF + 0x203, "Pad3 Left" }, { "", 0xFFFF + 0x204, "Pad3 Right" }, { "", 0xFFFF + 0x205, "Pad3 Start" }, { "", 0xFFFF + 0x206, "Pad3 Back" }, { "", 0xFFFF + 0x207, "Pad3 Left Thumb" }, { "", 0xFFFF + 0x208, "Pad3 Right Thumb" }, { "", 0xFFFF + 0x209, "Pad3 Left Bumper" }, { "", 0xFFFF + 0x20A, "Pad3 Right Bumper" }, { "", 0xFFFF + 0x20D, "Pad3 A" }, { "", 0xFFFF + 0x20E, "Pad3 B" }, { "", 0xFFFF + 0x20F, "Pad3 X" }, { "", 0xFFFF + 0x210, "Pad3 Y" }, { "", 0xFFFF + 0x211, "Pad3 L2" }, { "", 0xFFFF + 0x212, "Pad3 R2" }, { "", 0xFFFF + 0x213, "Pad3 RT Up" }, { "", 0xFFFF + 0x214, "Pad3 RT Down" }, { "", 0xFFFF + 0x215, "Pad3 RT Left" }, { "", 0xFFFF + 0x216, "Pad3 RT Right" }, { "", 0xFFFF + 0x301, "Pad4 Up" }, { "", 0xFFFF + 0x302, "Pad4 Down" }, { "", 0xFFFF + 0x303, "Pad4 Left" }, { "", 0xFFFF + 0x304, "Pad4 Right" }, { "", 0xFFFF + 0x305, "Pad4 Start" }, { "", 0xFFFF + 0x306, "Pad4 Back" }, { "", 0xFFFF + 0x307, "Pad4 Left Thumb" }, { "", 0xFFFF + 0x308, "Pad4 Right Thumb" }, { "", 0xFFFF + 0x309, "Pad4 Left Bumper" }, { "", 0xFFFF + 0x30A, "Pad4 Right Bumper" }, { "", 0xFFFF + 0x30D, "Pad4 A" }, { "", 0xFFFF + 0x30E, "Pad4 B" }, { "", 0xFFFF + 0x30F, "Pad4 X" }, { "", 0xFFFF + 0x310, "Pad4 Y" }, { "", 0xFFFF + 0x311, "Pad4 L2" }, { "", 0xFFFF + 0x312, "Pad4 R2" }, { "", 0xFFFF + 0x313, "Pad4 RT Up" }, { "", 0xFFFF + 0x314, "Pad4 RT Down" }, { "", 0xFFFF + 0x315, "Pad4 RT Left" }, { "", 0xFFFF + 0x316, "Pad4 RT Right" } }; class WindowsKeyManager : public IKeyManager { private: GamePad _gamePad; HWND _hWnd; public: WindowsKeyManager(HWND hWnd); ~WindowsKeyManager(); void RefreshState(); bool IsKeyPressed(uint32_t key); uint32_t GetPressedKey(); string GetKeyName(uint32_t key); uint32_t GetKeyCode(string keyName); };