Scancode Constants

These constants are used to represent the physical location of a keyboard key on the keybord. They are used in many places, such as the SDL_KeyboardEvent.keysym attribute.

csdl2.SDL_SCANCODE_UNKNOWN
csdl2.SDL_SCANCODE_A
csdl2.SDL_SCANCODE_B
csdl2.SDL_SCANCODE_C
csdl2.SDL_SCANCODE_D
csdl2.SDL_SCANCODE_E
csdl2.SDL_SCANCODE_F
csdl2.SDL_SCANCODE_G
csdl2.SDL_SCANCODE_H
csdl2.SDL_SCANCODE_I
csdl2.SDL_SCANCODE_J
csdl2.SDL_SCANCODE_K
csdl2.SDL_SCANCODE_L
csdl2.SDL_SCANCODE_M
csdl2.SDL_SCANCODE_N
csdl2.SDL_SCANCODE_O
csdl2.SDL_SCANCODE_P
csdl2.SDL_SCANCODE_Q
csdl2.SDL_SCANCODE_R
csdl2.SDL_SCANCODE_S
csdl2.SDL_SCANCODE_T
csdl2.SDL_SCANCODE_U
csdl2.SDL_SCANCODE_V
csdl2.SDL_SCANCODE_W
csdl2.SDL_SCANCODE_X
csdl2.SDL_SCANCODE_Y
csdl2.SDL_SCANCODE_Z
csdl2.SDL_SCANCODE_1
csdl2.SDL_SCANCODE_2
csdl2.SDL_SCANCODE_3
csdl2.SDL_SCANCODE_4
csdl2.SDL_SCANCODE_5
csdl2.SDL_SCANCODE_6
csdl2.SDL_SCANCODE_7
csdl2.SDL_SCANCODE_8
csdl2.SDL_SCANCODE_9
csdl2.SDL_SCANCODE_0
csdl2.SDL_SCANCODE_RETURN
csdl2.SDL_SCANCODE_ESCAPE
csdl2.SDL_SCANCODE_BACKSPACE
csdl2.SDL_SCANCODE_TAB
csdl2.SDL_SCANCODE_SPACE
csdl2.SDL_SCANCODE_MINUS
csdl2.SDL_SCANCODE_EQUALS
csdl2.SDL_SCANCODE_LEFTBRACKET
csdl2.SDL_SCANCODE_RIGHTBRACKET
csdl2.SDL_SCANCODE_BACKSLASH

Located at the lower left of the return key on ISO keyboards and at the right end of the QWERTY row on ANSI keyboards. Produces REVERSE SOLIDUS (backslash) and VERTICAL LINE in a US layout, REVERSE SOLIDUS and VERTICAL LINE in a UK Mac layout, NUMBER SIGN and TILDE in a UK Windows layout, DOLLAR SIGN and POUND SIGN in a Swiss German layout, NUMBER SIGN and APOSTROPHE in a German layout, GRAVE ACCENT and POUND SIGN in a French Mac layout, and ASTERISK and MICRO SIGN in a French Windows layout.

csdl2.SDL_SCANCODE_NONUSHASH

ISO USB keyboards actually use this code instead of 49 for the same key, but all OSes I’ve seen treat the two codes identically. So, as an implementor, unless your keyboard generates both of those codes and your OS treats them differently, you should generate SDL_SCANCODE_BACKSLASH instead of this code. As a user, you should not rely on this code because SDL will never generate it with most (all?) keyboards.

csdl2.SDL_SCANCODE_SEMICOLON
csdl2.SDL_SCANCODE_APOSTROPHE
csdl2.SDL_SCANCODE_GRAVE

Located in the top left corner (on both ANSI and ISO keyboards). Produces GRAVE ACCENT and TILDE in a US Windows layout and in US and UK Mac layouts on ANSI keyboards, GRAVE ACCENT and NOT SIGN in a UK Windows layout, SECTION SIGN and PLUS-MINUS SIGN in US and UK Mac layouts on ISO keyboards, SECTION SIGN and DEGREE SIGN in a Swiss German layout (Mac: only on ISO keyboards), CIRCUMFLEX ACCENT and DEGREE SIGN in a German layout (Mac: only on ISO keyboards), SUPERSCRIPT TWO and TILDE in a French Windows layout, COMMERCIAL AT and NUMBER SIGN in a French Mac layout on ISO keyboards, and LESS-THAN SIGN and GREATER-THAN SIGN in a Swiss German, German, or French Mac layout on ANSI keyboards.

csdl2.SDL_SCANCODE_COMMA
csdl2.SDL_SCANCODE_PERIOD
csdl2.SDL_SCANCODE_SLASH
csdl2.SDL_SCANCODE_CAPSLOCK
csdl2.SDL_SCANCODE_F1
csdl2.SDL_SCANCODE_F2
csdl2.SDL_SCANCODE_F3
csdl2.SDL_SCANCODE_F4
csdl2.SDL_SCANCODE_F5
csdl2.SDL_SCANCODE_F6
csdl2.SDL_SCANCODE_F7
csdl2.SDL_SCANCODE_F8
csdl2.SDL_SCANCODE_F9
csdl2.SDL_SCANCODE_F10
csdl2.SDL_SCANCODE_F11
csdl2.SDL_SCANCODE_F12
csdl2.SDL_SCANCODE_PRINTSCREEN
csdl2.SDL_SCANCODE_SCROLLLOCK
csdl2.SDL_SCANCODE_PAUSE
csdl2.SDL_SCANCODE_INSERT

Insert on PC, help on some Mac keyboards (but does send code 73, not 117)

csdl2.SDL_SCANCODE_HOME
csdl2.SDL_SCANCODE_PAGEUP
csdl2.SDL_SCANCODE_DELETE
csdl2.SDL_SCANCODE_END
csdl2.SDL_SCANCODE_PAGEDOWN
csdl2.SDL_SCANCODE_RIGHT
csdl2.SDL_SCANCODE_LEFT
csdl2.SDL_SCANCODE_DOWN
csdl2.SDL_SCANCODE_UP
csdl2.SDL_SCANCODE_NUMLOCKCLEAR

Num lock on PC, clear on Mac keyboards

csdl2.SDL_SCANCODE_KP_DIVIDE
csdl2.SDL_SCANCODE_KP_MULTIPLY
csdl2.SDL_SCANCODE_KP_MINUS
csdl2.SDL_SCANCODE_KP_PLUS
csdl2.SDL_SCANCODE_KP_ENTER
csdl2.SDL_SCANCODE_KP_1
csdl2.SDL_SCANCODE_KP_2
csdl2.SDL_SCANCODE_KP_3
csdl2.SDL_SCANCODE_KP_4
csdl2.SDL_SCANCODE_KP_5
csdl2.SDL_SCANCODE_KP_6
csdl2.SDL_SCANCODE_KP_7
csdl2.SDL_SCANCODE_KP_8
csdl2.SDL_SCANCODE_KP_9
csdl2.SDL_SCANCODE_KP_0
csdl2.SDL_SCANCODE_KP_PERIOD
csdl2.SDL_SCANCODE_NONUSBACKSLASH

This is the additional key that ISO keyboards have over ANSI ones, located between left shift and Y. Produces GRAVE ACCENT and TILDE in a US or UK Mac layout, REVERSE SOLIDUS (backslash) and VERTICAL LINE in a US or UK Windows layout, and LESS-THAN SIGN and GREATER-THAN SIGN in a Swiss German, German, or French layout.

csdl2.SDL_SCANCODE_APPLICATION

Windows contextual menu, compose.

csdl2.SDL_SCANCODE_POWER

The USB document says this is a status flag, not a physical key - but some Mac keyboards do have a power key.

csdl2.SDL_SCANCODE_KP_EQUALS
csdl2.SDL_SCANCODE_F13
csdl2.SDL_SCANCODE_F14
csdl2.SDL_SCANCODE_F15
csdl2.SDL_SCANCODE_F16
csdl2.SDL_SCANCODE_F17
csdl2.SDL_SCANCODE_F18
csdl2.SDL_SCANCODE_F19
csdl2.SDL_SCANCODE_F20
csdl2.SDL_SCANCODE_F21
csdl2.SDL_SCANCODE_F22
csdl2.SDL_SCANCODE_F23
csdl2.SDL_SCANCODE_F24
csdl2.SDL_SCANCODE_EXECUTE
csdl2.SDL_SCANCODE_HELP
csdl2.SDL_SCANCODE_MENU
csdl2.SDL_SCANCODE_SELECT
csdl2.SDL_SCANCODE_STOP
csdl2.SDL_SCANCODE_AGAIN

Redo.

csdl2.SDL_SCANCODE_UNDO
csdl2.SDL_SCANCODE_CUT
csdl2.SDL_SCANCODE_COPY
csdl2.SDL_SCANCODE_PASTE
csdl2.SDL_SCANCODE_FIND
csdl2.SDL_SCANCODE_MUTE
csdl2.SDL_SCANCODE_VOLUMEUP
csdl2.SDL_SCANCODE_VOLUMEDOWN
csdl2.SDL_SCANCODE_KP_COMMA
csdl2.SDL_SCANCODE_KP_EQUALSAS400
csdl2.SDL_SCANCODE_INTERNATIONAL1

Used on Asian keyboards, see footnotes in USB doc.

csdl2.SDL_SCANCODE_INTERNATIONAL2
csdl2.SDL_SCANCODE_INTERNATIONAL3

Yen.

csdl2.SDL_SCANCODE_INTERNATIONAL4
csdl2.SDL_SCANCODE_INTERNATIONAL5
csdl2.SDL_SCANCODE_INTERNATIONAL6
csdl2.SDL_SCANCODE_INTERNATIONAL7
csdl2.SDL_SCANCODE_INTERNATIONAL8
csdl2.SDL_SCANCODE_INTERNATIONAL9
csdl2.SDL_SCANCODE_LANG1

Hangul/English toggle.

csdl2.SDL_SCANCODE_LANG2

Hanja conversion.

csdl2.SDL_SCANCODE_LANG3

Katakana.

csdl2.SDL_SCANCODE_LANG4

Hiragana.

csdl2.SDL_SCANCODE_LANG5

Zenkaku/Hankaku

csdl2.SDL_SCANCODE_LANG6
csdl2.SDL_SCANCODE_LANG7
csdl2.SDL_SCANCODE_LANG8
csdl2.SDL_SCANCODE_LANG9
csdl2.SDL_SCANCODE_ALTERASE

Erase-Eaze

csdl2.SDL_SCANCODE_SYSREQ
csdl2.SDL_SCANCODE_CANCEL
csdl2.SDL_SCANCODE_CLEAR
csdl2.SDL_SCANCODE_PRIOR
csdl2.SDL_SCANCODE_RETURN2
csdl2.SDL_SCANCODE_SEPARATOR
csdl2.SDL_SCANCODE_OUT
csdl2.SDL_SCANCODE_OPER
csdl2.SDL_SCANCODE_CLEARAGAIN
csdl2.SDL_SCANCODE_CRSEL
csdl2.SDL_SCANCODE_EXSEL
csdl2.SDL_SCANCODE_KP_00
csdl2.SDL_SCANCODE_KP_000
csdl2.SDL_SCANCODE_THOUSANDSSEPARATOR
csdl2.SDL_SCANCODE_DECIMALSEPARATOR
csdl2.SDL_SCANCODE_CURRENCYUNIT
csdl2.SDL_SCANCODE_CURRENCYSUBUNIT
csdl2.SDL_SCANCODE_KP_LEFTPAREN
csdl2.SDL_SCANCODE_KP_RIGHTPAREN
csdl2.SDL_SCANCODE_KP_LEFTBRACE
csdl2.SDL_SCANCODE_KP_RIGHTBRACE
csdl2.SDL_SCANCODE_KP_TAB
csdl2.SDL_SCANCODE_KP_BACKSPACE
csdl2.SDL_SCANCODE_KP_A
csdl2.SDL_SCANCODE_KP_B
csdl2.SDL_SCANCODE_KP_C
csdl2.SDL_SCANCODE_KP_D
csdl2.SDL_SCANCODE_KP_E
csdl2.SDL_SCANCODE_KP_F
csdl2.SDL_SCANCODE_KP_XOR
csdl2.SDL_SCANCODE_KP_POWER
csdl2.SDL_SCANCODE_KP_PERCENT
csdl2.SDL_SCANCODE_KP_LESS
csdl2.SDL_SCANCODE_KP_GREATER
csdl2.SDL_SCANCODE_KP_AMPERSAND
csdl2.SDL_SCANCODE_KP_DBLAMPERSAND
csdl2.SDL_SCANCODE_KP_VERTICALBAR
csdl2.SDL_SCANCODE_KP_DBLVERTICALBAR
csdl2.SDL_SCANCODE_KP_COLON
csdl2.SDL_SCANCODE_KP_HASH
csdl2.SDL_SCANCODE_KP_SPACE
csdl2.SDL_SCANCODE_KP_AT
csdl2.SDL_SCANCODE_KP_EXCLAM
csdl2.SDL_SCANCODE_KP_MEMSTORE
csdl2.SDL_SCANCODE_KP_MEMRECALL
csdl2.SDL_SCANCODE_KP_MEMCLEAR
csdl2.SDL_SCANCODE_KP_MEMADD
csdl2.SDL_SCANCODE_KP_MEMSUBTRACT
csdl2.SDL_SCANCODE_KP_MEMMULTIPLY
csdl2.SDL_SCANCODE_KP_MEMDIVIDE
csdl2.SDL_SCANCODE_KP_PLUSMINUS
csdl2.SDL_SCANCODE_KP_CLEAR
csdl2.SDL_SCANCODE_KP_CLEARENTRY
csdl2.SDL_SCANCODE_KP_BINARY
csdl2.SDL_SCANCODE_KP_OCTAL
csdl2.SDL_SCANCODE_KP_DECIMAL
csdl2.SDL_SCANCODE_KP_HEXADECIMAL
csdl2.SDL_SCANCODE_LCTRL
csdl2.SDL_SCANCODE_LSHIFT
csdl2.SDL_SCANCODE_LALT

Alt, option.

csdl2.SDL_SCANCODE_LGUI

Windows, command (apple), meta

csdl2.SDL_SCANCODE_RCTRL
csdl2.SDL_SCANCODE_RSHIFT
csdl2.SDL_SCANCODE_RALT

Alt gr, option.

csdl2.SDL_SCANCODE_RGUI

Windows, command (apple), meta.

csdl2.SDL_SCANCODE_MODE
csdl2.SDL_SCANCODE_AUDIONEXT
csdl2.SDL_SCANCODE_AUDIOPREV
csdl2.SDL_SCANCODE_AUDIOSTOP
csdl2.SDL_SCANCODE_AUDIOPLAY
csdl2.SDL_SCANCODE_AUDIOMUTE
csdl2.SDL_SCANCODE_MEDIASELECT
csdl2.SDL_SCANCODE_WWW
csdl2.SDL_SCANCODE_MAIL
csdl2.SDL_SCANCODE_CALCULATOR
csdl2.SDL_SCANCODE_COMPUTER
csdl2.SDL_SCANCODE_AC_HOME
csdl2.SDL_SCANCODE_AC_BACK
csdl2.SDL_SCANCODE_AC_FORWARD
csdl2.SDL_SCANCODE_AC_STOP
csdl2.SDL_SCANCODE_AC_REFRESH
csdl2.SDL_SCANCODE_AC_BOOKMARKS
csdl2.SDL_SCANCODE_BRIGHTNESSDOWN
csdl2.SDL_SCANCODE_BRIGHTNESSUP
csdl2.SDL_SCANCODE_DISPLAYSWITCH

Display mirroring/dual display switch, video mode switch.

csdl2.SDL_SCANCODE_KBDILLUMTOGGLE
csdl2.SDL_SCANCODE_KBDILLUMDOWN
csdl2.SDL_SCANCODE_KBDILLUMUP
csdl2.SDL_SCANCODE_EJECT
csdl2.SDL_SCANCODE_SLEEP
csdl2.SDL_SCANCODE_APP1
csdl2.SDL_SCANCODE_APP2
csdl2.SDL_NUM_SCANCODES

Not a key, just marks the number of scancodes for array bounds.