Appendix A. The Windows keycodes

Appendix A. The Windows keycodes

It's important to know the keycodes if you want to make more sophisticated listeners. If you wanted to distinguish between the left and right versions of the Shift, Control, and Alt keys you would need to be actively checking these keys in each call to your cController::update method. You might write a cControllerLeftRight child class with an overridden update to do this.

This is taken from the file winuser.h. The default set-up for keycodes is that for normal letters and numbers like 0 or Z, you don't use VK_0 and VK_Z, instead you use the traditional ASCII code symbols '0', 'Z', etc.

/* 
* Virtual Keys, Standard Set 
*/ 
#define VK_LBUTTON       0x01 
#define VK_RBUTTON       0x02 
#define VK_CANCEL        0x03 
#define VK_MBUTTON       0x04 
    /* NOT contiguous with L & RBUTTON */ 

#define VK_BACK          0x08 
#define VK_TAB           0x09 

#define VK_CLEAR         0x0C 
#define VK_RETURN        0x0D 

#define VK_SHIFT         0x10 
#define VK_CONTROL       0x11 
#define VK_MENU          0x12 
#define VK_PAUSE         0x13 
#define VK_CAPITAL       0x14 

#define VK_KANA          0x15 
#define VK_HANGEUL       0x15  /* old name for compatibility */ 
#define VK_HANGUL        0x15 
#define VK_JUNJA         0x17 
#define VK_FINAL         0x18 
#define VK_HANJA         0x19 
#define VK_KANJI         0x19 

#define VK_ESCAPE        0x1B 

#define VK_CONVERT       0x1C 
#define VK_NONCONVERT    0x1D 
#define VK_ACCEPT        0x1E 
#define VK_MODECHANGE    0x1F 
#define VK_SPACE         0x20 
#define VK_PRIOR         0x21 
#define VK_NEXT          0x22 
#define VK_END           0x23 
#define VK_HOME          0x24 
#define VK_LEFT          0x25 
#define VK_UP            0x26 
#define VK_RIGHT         0x27 
#define VK_DOWN          0x28 
#define VK_SELECT        0x29 
#define VK_PRINT         0x2A 
#define VK_EXECUTE       0x2B 
#define VK_SNAPSHOT      0x2C 
#define VK_INSERT        0x2D 
#define VK_DELETE        0x2E 
#define VK_HELP          0x2F 

/* VK_0 thru VK_9 should be ASCII '0' thru '9' (0x30 ? 0x39) */ 
/* VK_A thru VK_Z should be ASCII 'A' thru 'Z' (0x41 ? 0x5A) */ 
/* Unless you define them yourself, you can't use symbols VK_0, 
    VK_A, etc. in your code, and you must use '0', 'A', etc. 
    instead. To correct this, The Pop framework defines the 
    missing VK_0 through VK_9 and VK_A through VK_Z so you can in 
    fact use these symbols if you include controller.h. */ 

#define VK_LWIN          0x5B 
#define VK_RWIN          0x5C 
#define VK_APPS          0x5D 

#define VK_NUMPAD0       0x60 
#define VK_NUMPAD1       0x61 
#define VK_NUMPAD2       0x62 
#define VK_NUMPAD3       0x63 
#define VK_NUMPAD4       0x64 
#define VK_NUMPAD5       0x65 
#define VK_NUMPAD6       0x66 
#define VK_NUMPAD7       0x67 
#define VK_NUMPAD8       0x68 
#define VK_NUMPAD9       0x69 
#define VK_MULTIPLY      0x6A 
#define VK_ADD           0x6B 
#define VK_SEPARATOR     0x6C 
#define VK_SUBTRACT      0x6D 
#define VK_DECIMAL       0x6E 
#define VK_DIVIDE        0x6F 
#define VK_F1            0x70 
#define VK_F2            0x71 
#define VK_F3            0x72 
#define VK_F4            0x73 
#define VK_F5            0x74 
#define VK_F6            0x75 
#define VK_F7            0x76 
#define VK_F8            0x77 
#define VK_F9            0x78 
#define VK_F10           0x79 
#define VK_F11           0x7A 
#define VK_F12           0x7B 
#define VK_F13           0x7C 
#define VK_F14           0x7D 
#define VK_F15           0x7E 
#define VK_F16           0x7F 
#define VK_F17           0x80 
#define VK_F18           0x81 
#define VK_F19           0x82 
#define VK_F20           0x83 
#define VK_F21           0x84 
#define VK_F22           0x85 
#define VK_F23           0x86 
#define VK_F24           0x87 

#define VK_NUMLOCK       0x90 
#define VK_SCROLL        0x91 
/* 
The following are left and right Alt, Ctrl and Shift virtual 
    keys.Used only as parameters to GetAsyncKeyState() and 
    GetKeyState(). No other API or message will distinguish left 
    and right keys in this way. 
*/ 
#define VK_LSHIFT        0xA0 
#define VK_RSHIFT        0xA1 
#define VK_LCONTROL      0xA2 
#define VK_RCONTROL      0xA3 
#define VK_LMENU         0xA4 
#define VK_RMENU         0xA5 


    Part I: Software Engineering and Computer Games
    Part II: Software Engineering and Computer Games Reference