// virtual_key_codes.h
#ifndef VIRTUAL_KEY_CODES_H
#define VIRTUAL_KEY_CODES_H

#define VK_LBUTTON 0x01   // Left mouse button
#define VK_RBUTTON 0x02   // Right mouse button
#define VK_CANCEL 0x03    // Control-break processing
#define VK_MBUTTON 0x04   // Middle mouse button
#define VK_XBUTTON1 0x05  // X1 mouse button
#define VK_XBUTTON2 0x06  // X2 mouse button
// 0x07 Reserved
#define VK_BACK 0x08  // Backspace key
#define VK_TAB 0x09   // Tab key
// 0x0A-0B Reserved
#define VK_CLEAR 0x0C   // Clear key
#define VK_RETURN 0x0D  // Enter key
// 0x0E-0F Unassigned
#define VK_SHIFT 0x10       // Shift key
#define VK_CONTROL 0x11     // Ctrl key
#define VK_MENU 0x12        // Alt key
#define VK_PAUSE 0x13       // Pause key
#define VK_CAPITAL 0x14     // Caps lock key
#define VK_KANA 0x15        // IME Kana mode
#define VK_HANGUL 0x15      // IME Hangul mode
#define VK_IME_ON 0x16      // IME On
#define VK_JUNJA 0x17       // IME Junja mode
#define VK_FINAL 0x18       // IME final mode
#define VK_HANJA 0x19       // IME Hanja mode
#define VK_KANJI 0x19       // IME Kanji mode
#define VK_IME_OFF 0x1A     // IME Off
#define VK_ESCAPE 0x1B      // Esc key
#define VK_CONVERT 0x1C     // IME convert
#define VK_NONCONVERT 0x1D  // IME nonconvert
#define VK_ACCEPT 0x1E      // IME accept
#define VK_MODECHANGE 0x1F  // IME mode change request
#define VK_SPACE 0x20       // Spacebar key
#define VK_PRIOR 0x21       // Page up key
#define VK_NEXT 0x22        // Page down key
#define VK_END 0x23         // End key
#define VK_HOME 0x24        // Home key
#define VK_LEFT 0x25        // Left arrow key
#define VK_UP 0x26          // Up arrow key
#define VK_RIGHT 0x27       // Right arrow key
#define VK_DOWN 0x28        // Down arrow key
#define VK_SELECT 0x29      // Select key
#define VK_PRINT 0x2A       // Print key
#define VK_EXECUTE 0x2B     // Execute key
#define VK_SNAPSHOT 0x2C    // Print screen key
#define VK_INSERT 0x2D      // Insert key
#define VK_DELETE 0x2E      // Delete key
#define VK_HELP 0x2F        // Help key

#define VK_0 0x30  // 0 key
#define VK_1 0x31  // 1 key
#define VK_2 0x32  // 2 key
#define VK_3 0x33  // 3 key
#define VK_4 0x34  // 4 key
#define VK_5 0x35  // 5 key
#define VK_6 0x36  // 6 key
#define VK_7 0x37  // 7 key
#define VK_8 0x38  // 8 key
#define VK_9 0x39  // 9 key
// 0x3A-40 Undefined

#define VK_A 0x41  // A key
#define VK_B 0x42  // B key
#define VK_C 0x43  // C key
#define VK_D 0x44  // D key
#define VK_E 0x45  // E key
#define VK_F 0x46  // F key
#define VK_G 0x47  // G key
#define VK_H 0x48  // H key
#define VK_I 0x49  // I key
#define VK_J 0x4A  // J key
#define VK_K 0x4B  // K key
#define VK_L 0x4C  // L key
#define VK_M 0x4D  // M key
#define VK_N 0x4E  // N key
#define VK_O 0x4F  // O key
#define VK_P 0x50  // P key
#define VK_Q 0x51  // Q key
#define VK_R 0x52  // R key
#define VK_S 0x53  // S key
#define VK_T 0x54  // T key
#define VK_U 0x55  // U key
#define VK_V 0x56  // V key
#define VK_W 0x57  // W key
#define VK_X 0x58  // X key
#define VK_Y 0x59  // Y key
#define VK_Z 0x5A  // Z key

#define VK_LWIN 0x5B  // Left Windows logo key
#define VK_RWIN 0x5C  // Right Windows logo key
#define VK_APPS 0x5D  // Application key
// 0x5E Reserved
#define VK_SLEEP 0x5F  // Computer Sleep key

#define VK_NUMPAD0 0x60    // Numeric keypad 0 key
#define VK_NUMPAD1 0x61    // Numeric keypad 1 key
#define VK_NUMPAD2 0x62    // Numeric keypad 2 key
#define VK_NUMPAD3 0x63    // Numeric keypad 3 key
#define VK_NUMPAD4 0x64    // Numeric keypad 4 key
#define VK_NUMPAD5 0x65    // Numeric keypad 5 key
#define VK_NUMPAD6 0x66    // Numeric keypad 6 key
#define VK_NUMPAD7 0x67    // Numeric keypad 7 key
#define VK_NUMPAD8 0x68    // Numeric keypad 8 key
#define VK_NUMPAD9 0x69    // Numeric keypad 9 key
#define VK_MULTIPLY 0x6A   // Multiply key
#define VK_ADD 0x6B        // Add key
#define VK_SEPARATOR 0x6C  // Separator key
#define VK_SUBTRACT 0x6D   // Subtract key
#define VK_DECIMAL 0x6E    // Decimal key
#define VK_DIVIDE 0x6F     // Divide key

#define VK_F1 0x70   // F1 key
#define VK_F2 0x71   // F2 key
#define VK_F3 0x72   // F3 key
#define VK_F4 0x73   // F4 key
#define VK_F5 0x74   // F5 key
#define VK_F6 0x75   // F6 key
#define VK_F7 0x76   // F7 key
#define VK_F8 0x77   // F8 key
#define VK_F9 0x78   // F9 key
#define VK_F10 0x79  // F10 key
#define VK_F11 0x7A  // F11 key
#define VK_F12 0x7B  // F12 key
#define VK_F13 0x7C  // F13 key
#define VK_F14 0x7D  // F14 key
#define VK_F15 0x7E  // F15 key
#define VK_F16 0x7F  // F16 key
#define VK_F17 0x80  // F17 key
#define VK_F18 0x81  // F18 key
#define VK_F19 0x82  // F19 key
#define VK_F20 0x83  // F20 key
#define VK_F21 0x84  // F21 key
#define VK_F22 0x85  // F22 key
#define VK_F23 0x86  // F23 key
#define VK_F24 0x87  // F24 key
// 0x88–0x8F Reserved

#define VK_NUMLOCK 0x90  // Num lock key
#define VK_SCROLL 0x91   // Scroll lock key
// 0x92–0x96 OEM specific
// 0x97–0x9F Unassigned

#define VK_LSHIFT 0xA0    // Left Shift key
#define VK_RSHIFT 0xA1    // Right Shift key
#define VK_LCONTROL 0xA2  // Left Ctrl key
#define VK_RCONTROL 0xA3  // Right Ctrl key
#define VK_LMENU 0xA4     // Left Alt key
#define VK_RMENU 0xA5     // Right Alt key

#define VK_BROWSER_BACK 0xA6       // Browser Back key
#define VK_BROWSER_FORWARD 0xA7    // Browser Forward key
#define VK_BROWSER_REFRESH 0xA8    // Browser Refresh key
#define VK_BROWSER_STOP 0xA9       // Browser Stop key
#define VK_BROWSER_SEARCH 0xAA     // Browser Search key
#define VK_BROWSER_FAVORITES 0xAB  // Browser Favorites key
#define VK_BROWSER_HOME 0xAC       // Browser Start and Home key
#define VK_VOLUME_MUTE 0xAD        // Volume Mute key
#define VK_VOLUME_DOWN 0xAE        // Volume Down key
#define VK_VOLUME_UP 0xAF          // Volume Up key

#define VK_MEDIA_NEXT_TRACK 0xB0     // Next Track key
#define VK_MEDIA_PREV_TRACK 0xB1     // Previous Track key
#define VK_MEDIA_STOP 0xB2           // Stop Media key
#define VK_MEDIA_PLAY_PAUSE 0xB3     // Play/Pause Media key
#define VK_LAUNCH_MAIL 0xB4          // Start Mail key
#define VK_LAUNCH_MEDIA_SELECT 0xB5  // Select Media key
#define VK_LAUNCH_APP1 0xB6          // Start Application 1 key
#define VK_LAUNCH_APP2 0xB7          // Start Application 2 key
// 0xB8–0xB9 Reserved

#define VK_OEM_1 0xBA       // For US: Semicolon/Colon key
#define VK_OEM_PLUS 0xBB    // Equals/Plus key
#define VK_OEM_COMMA 0xBC   // Comma/Less Than key
#define VK_OEM_MINUS 0xBD   // Dash/Underscore key
#define VK_OEM_PERIOD 0xBE  // Period/Greater Than key
#define VK_OEM_2 0xBF       // Slash/Question Mark key
#define VK_OEM_3 0xC0       // Grave Accent/Tilde key
// 0xC1–0xDA Reserved

#define VK_OEM_4 0xDB  // Left Brace key
#define VK_OEM_5 0xDC  // Backslash/Pipe key
#define VK_OEM_6 0xDD  // Right Brace key
#define VK_OEM_7 0xDE  // Apostrophe/Quote key
#define VK_OEM_8 0xDF  // (Canadian CSA: Right Ctrl key)
// 0xE0 Reserved
#define VK_OEM_102 0xE2  // (European ISO: Backslash/Pipe key)
// 0xE3–E4 OEM specific
#define VK_PROCESSKEY 0xE5  // IME PROCESS key
// 0xE6 OEM specific
#define VK_PACKET 0xE7  // Unicode characters as keystrokes
// 0xE8 Unassigned
// 0xE9–F5 OEM specific
#define VK_ATTN 0xF6       // Attn key
#define VK_CRSEL 0xF7      // CrSel key
#define VK_EXSEL 0xF8      // ExSel key
#define VK_EREOF 0xF9      // Erase EOF key
#define VK_PLAY 0xFA       // Play key
#define VK_ZOOM 0xFB       // Zoom key
#define VK_NONAME 0xFC     // Reserved
#define VK_PA1 0xFD        // PA1 key
#define VK_OEM_CLEAR 0xFE  // Clear key

#endif  // VIRTUAL_KEY_CODES_H
