2015-07-10 21:07:24 -04:00
# pragma once
# include "stdafx.h"
# include "..\Core\IKeyManager.h"
# include "GamePad.h"
struct KeyDefinition {
2015-07-11 08:27:22 -04:00
string name ;
2015-07-10 21:07:24 -04:00
uint32_t keyCode ;
2015-07-11 08:27:22 -04:00
string description ;
2015-07-10 21:07:24 -04:00
} ;
const KeyDefinition _keyDefinitions [ ] = {
2015-07-11 08:27:22 -04:00
//{ "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 " } ,
2015-07-10 21:07:24 -04:00
//{"-", 0x92-96,"OEM specific"},
2015-07-11 08:27:22 -04:00
//{ "-", 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" },
2015-07-10 21:07:24 -04:00
// {"-",0xE6,"OEM specific"},
2015-07-11 08:27:22 -04:00
{ " 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 " } ,
2015-07-10 21:07:24 -04:00
// {"-",0xE8,"Unassigned"},
2015-07-11 08:27:22 -04:00
//{ "-", 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 " } ,
2015-07-10 21:07:24 -04:00
2015-07-11 08:27:22 -04:00
{ " " , 0xFFFF + 0x01 , " Pad1 Up " } ,
{ " " , 0xFFFF + 0x02 , " Pad1 Down " } ,
{ " " , 0xFFFF + 0x03 , " Pad1 Left " } ,
{ " " , 0xFFFF + 0x04 , " Pad1 Right " } ,
{ " " , 0xFFFF + 0x05 , " Pad1 Start " } ,
{ " " , 0xFFFF + 0x06 , " Pad1 Back " } ,
2016-02-05 23:49:03 -05:00
{ " " , 0xFFFF + 0x07 , " Pad1 L3 " } ,
{ " " , 0xFFFF + 0x08 , " Pad1 R3 " } ,
{ " " , 0xFFFF + 0x09 , " Pad1 L1 " } ,
{ " " , 0xFFFF + 0x0A , " Pad1 R1 " } ,
2015-07-11 08:27:22 -04:00
{ " " , 0xFFFF + 0x0D , " Pad1 A " } ,
{ " " , 0xFFFF + 0x0E , " Pad1 B " } ,
{ " " , 0xFFFF + 0x0F , " Pad1 X " } ,
2016-02-05 23:49:03 -05:00
{ " " , 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 " }
2015-07-10 21:07:24 -04:00
} ;
class WindowsKeyManager : public IKeyManager
{
private :
GamePad _gamePad ;
HWND _hWnd ;
public :
WindowsKeyManager ( HWND hWnd ) ;
~ WindowsKeyManager ( ) ;
void RefreshState ( ) ;
bool IsKeyPressed ( uint32_t key ) ;
uint32_t GetPressedKey ( ) ;
2015-07-11 08:27:22 -04:00
string GetKeyName ( uint32_t key ) ;
uint32_t GetKeyCode ( string keyName ) ;
2015-07-10 21:07:24 -04:00
} ;