SDL 2.0
SDL_scancode.h
Go to the documentation of this file.
1/*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
4
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
12
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
20*/
21
22/**
23 * # CategoryScancode
24 *
25 * Defines keyboard scancodes.
26 */
27
28#ifndef SDL_scancode_h_
29#define SDL_scancode_h_
30
31#include "SDL_stdinc.h"
32
33/**
34 * The SDL keyboard scancode representation.
35 *
36 * Values of this type are used to represent keyboard keys, among other places
37 * in the SDL_Keysym::scancode key.keysym.scancode field of the SDL_Event
38 * structure.
39 *
40 * The values in this enumeration are based on the USB usage page standard:
41 * https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf
42 */
43typedef enum SDL_Scancode
44{
46
47 /**
48 * \name Usage page 0x07
49 *
50 * These values are from usage page 0x07 (USB keyboard page).
51 */
52 /* @{ */
53
80
91
97
102 SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return
103 * key on ISO keyboards and at the right end
104 * of the QWERTY row on ANSI keyboards.
105 * Produces REVERSE SOLIDUS (backslash) and
106 * VERTICAL LINE in a US layout, REVERSE
107 * SOLIDUS and VERTICAL LINE in a UK Mac
108 * layout, NUMBER SIGN and TILDE in a UK
109 * Windows layout, DOLLAR SIGN and POUND SIGN
110 * in a Swiss German layout, NUMBER SIGN and
111 * APOSTROPHE in a German layout, GRAVE
112 * ACCENT and POUND SIGN in a French Mac
113 * layout, and ASTERISK and MICRO SIGN in a
114 * French Windows layout.
115 */
116 SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code
117 * instead of 49 for the same key, but all
118 * OSes I've seen treat the two codes
119 * identically. So, as an implementor, unless
120 * your keyboard generates both of those
121 * codes and your OS treats them differently,
122 * you should generate SDL_SCANCODE_BACKSLASH
123 * instead of this code. As a user, you
124 * should not rely on this code because SDL
125 * will never generate it with most (all?)
126 * keyboards.
127 */
130 SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI
131 * and ISO keyboards). Produces GRAVE ACCENT and
132 * TILDE in a US Windows layout and in US and UK
133 * Mac layouts on ANSI keyboards, GRAVE ACCENT
134 * and NOT SIGN in a UK Windows layout, SECTION
135 * SIGN and PLUS-MINUS SIGN in US and UK Mac
136 * layouts on ISO keyboards, SECTION SIGN and
137 * DEGREE SIGN in a Swiss German layout (Mac:
138 * only on ISO keyboards), CIRCUMFLEX ACCENT and
139 * DEGREE SIGN in a German layout (Mac: only on
140 * ISO keyboards), SUPERSCRIPT TWO and TILDE in a
141 * French Windows layout, COMMERCIAL AT and
142 * NUMBER SIGN in a French Mac layout on ISO
143 * keyboards, and LESS-THAN SIGN and GREATER-THAN
144 * SIGN in a Swiss German, German, or French Mac
145 * layout on ANSI keyboards.
146 */
150
152
165
169 SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but
170 does send code 73, not 117) */
180
181 SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards
182 */
199
200 SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO
201 * keyboards have over ANSI ones,
202 * located between left shift and Y.
203 * Produces GRAVE ACCENT and TILDE in a
204 * US or UK Mac layout, REVERSE SOLIDUS
205 * (backslash) and VERTICAL LINE in a
206 * US or UK Windows layout, and
207 * LESS-THAN SIGN and GREATER-THAN SIGN
208 * in a Swiss German, German, or French
209 * layout. */
210 SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */
211 SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag,
212 * not a physical key - but some Mac keyboards
213 * do have a power key. */
228 SDL_SCANCODE_HELP = 117, /**< AL Integrated Help Center */
229 SDL_SCANCODE_MENU = 118, /**< Menu (show menu) */
231 SDL_SCANCODE_STOP = 120, /**< AC Stop */
232 SDL_SCANCODE_AGAIN = 121, /**< AC Redo/Repeat */
233 SDL_SCANCODE_UNDO = 122, /**< AC Undo */
234 SDL_SCANCODE_CUT = 123, /**< AC Cut */
235 SDL_SCANCODE_COPY = 124, /**< AC Copy */
236 SDL_SCANCODE_PASTE = 125, /**< AC Paste */
237 SDL_SCANCODE_FIND = 126, /**< AC Find */
241/* not sure whether there's a reason to enable these */
242/* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */
243/* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */
244/* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */
247
248 SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see
249 footnotes in USB doc */
258 SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */
259 SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */
260 SDL_SCANCODE_LANG3 = 146, /**< Katakana */
261 SDL_SCANCODE_LANG4 = 147, /**< Hiragana */
262 SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */
263 SDL_SCANCODE_LANG6 = 149, /**< reserved */
264 SDL_SCANCODE_LANG7 = 150, /**< reserved */
265 SDL_SCANCODE_LANG8 = 151, /**< reserved */
266 SDL_SCANCODE_LANG9 = 152, /**< reserved */
267
268 SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */
270 SDL_SCANCODE_CANCEL = 155, /**< AC Cancel */
280
327
330 SDL_SCANCODE_LALT = 226, /**< alt, option */
331 SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */
334 SDL_SCANCODE_RALT = 230, /**< alt gr, option */
335 SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */
336
337 SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered
338 * by any of the above, but since there's a
339 * special KMOD_MODE for it I'm adding it here
340 */
341
342 /* @} *//* Usage page 0x07 */
343
344 /**
345 * \name Usage page 0x0C
346 *
347 * These values are mapped from usage page 0x0C (USB consumer page).
348 * See https://usb.org/sites/default/files/hut1_2.pdf
349 *
350 * There are way more keys in the spec than we can represent in the
351 * current scancode range, so pick the ones that commonly come up in
352 * real world usage.
353 */
354 /* @{ */
355
362 SDL_SCANCODE_WWW = 264, /**< AL Internet Browser */
364 SDL_SCANCODE_CALCULATOR = 266, /**< AL Calculator */
366 SDL_SCANCODE_AC_SEARCH = 268, /**< AC Search */
367 SDL_SCANCODE_AC_HOME = 269, /**< AC Home */
368 SDL_SCANCODE_AC_BACK = 270, /**< AC Back */
369 SDL_SCANCODE_AC_FORWARD = 271, /**< AC Forward */
370 SDL_SCANCODE_AC_STOP = 272, /**< AC Stop */
371 SDL_SCANCODE_AC_REFRESH = 273, /**< AC Refresh */
372 SDL_SCANCODE_AC_BOOKMARKS = 274, /**< AC Bookmarks */
373
374 /* @} *//* Usage page 0x0C */
375
376 /**
377 * \name Walther keys
378 *
379 * These are values that Christian Walther added (for mac keyboard?).
380 */
381 /* @{ */
382
385 SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display
386 switch, video mode switch */
391 SDL_SCANCODE_SLEEP = 282, /**< SC System Sleep */
392
395
396 /* @} *//* Walther keys */
397
398 /**
399 * \name Usage page 0x0C (additional media keys)
400 *
401 * These values are mapped from usage page 0x0C (USB consumer page).
402 */
403 /* @{ */
404
407
408 /* @} *//* Usage page 0x0C (additional media keys) */
409
410 /**
411 * \name Mobile keys
412 *
413 * These are values that are often used on mobile phones.
414 */
415 /* @{ */
416
417 SDL_SCANCODE_SOFTLEFT = 287, /**< Usually situated below the display on phones and
418 used as a multi-function feature key for selecting
419 a software defined function shown on the bottom left
420 of the display. */
421 SDL_SCANCODE_SOFTRIGHT = 288, /**< Usually situated below the display on phones and
422 used as a multi-function feature key for selecting
423 a software defined function shown on the bottom right
424 of the display. */
425 SDL_SCANCODE_CALL = 289, /**< Used for accepting phone calls. */
426 SDL_SCANCODE_ENDCALL = 290, /**< Used for rejecting phone calls. */
427
428 /* @} *//* Mobile keys */
429
430 /* Add any other keys here. */
431
432 SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes
433 for array bounds */
435
436#endif /* SDL_scancode_h_ */
437
438/* vi: set ts=4 sw=4 expandtab: */
SDL_Scancode
@ SDL_SCANCODE_E
@ SDL_SCANCODE_END
@ SDL_SCANCODE_OUT
@ SDL_SCANCODE_BACKSLASH
@ SDL_SCANCODE_ESCAPE
@ SDL_SCANCODE_KP_OCTAL
@ SDL_SCANCODE_KP_CLEARENTRY
@ SDL_SCANCODE_BRIGHTNESSUP
@ SDL_SCANCODE_KP_EXCLAM
@ SDL_SCANCODE_KP_DECIMAL
@ SDL_SCANCODE_F15
@ SDL_SCANCODE_M
@ SDL_SCANCODE_F12
@ SDL_SCANCODE_X
@ SDL_SCANCODE_W
@ SDL_SCANCODE_KP_E
@ SDL_SCANCODE_INTERNATIONAL4
@ SDL_SCANCODE_KP_PLUS
@ SDL_SCANCODE_F4
@ SDL_SCANCODE_LANG8
@ SDL_SCANCODE_RIGHTBRACKET
@ SDL_SCANCODE_INTERNATIONAL1
@ SDL_SCANCODE_INTERNATIONAL7
@ SDL_SCANCODE_KP_GREATER
@ SDL_SCANCODE_LANG2
@ SDL_SCANCODE_CAPSLOCK
@ SDL_SCANCODE_B
@ SDL_SCANCODE_F2
@ SDL_SCANCODE_KP_MINUS
@ SDL_SCANCODE_KP_00
@ SDL_SCANCODE_F6
@ SDL_SCANCODE_NONUSBACKSLASH
@ SDL_SCANCODE_KP_0
@ SDL_SCANCODE_KP_B
@ SDL_SCANCODE_F11
@ SDL_SCANCODE_CANCEL
@ SDL_SCANCODE_COMMA
@ SDL_SCANCODE_KP_PERIOD
@ SDL_SCANCODE_KP_F
@ SDL_SCANCODE_KP_LEFTPAREN
@ SDL_SCANCODE_F24
@ SDL_SCANCODE_AUDIOMUTE
@ SDL_SCANCODE_CALCULATOR
@ SDL_SCANCODE_CUT
@ SDL_SCANCODE_Y
@ SDL_SCANCODE_KP_VERTICALBAR
@ SDL_SCANCODE_APOSTROPHE
@ SDL_SCANCODE_KP_HEXADECIMAL
@ SDL_SCANCODE_KP_COMMA
@ SDL_SCANCODE_KP_SPACE
@ SDL_SCANCODE_2
@ SDL_SCANCODE_KP_BACKSPACE
@ SDL_SCANCODE_O
@ SDL_SCANCODE_CLEARAGAIN
@ SDL_SCANCODE_RGUI
@ SDL_SCANCODE_K
@ SDL_SCANCODE_F
@ SDL_SCANCODE_DELETE
@ SDL_SCANCODE_F10
@ SDL_SCANCODE_F3
@ SDL_SCANCODE_KP_AMPERSAND
@ SDL_SCANCODE_KP_COLON
@ SDL_SCANCODE_5
@ SDL_SCANCODE_KP_RIGHTPAREN
@ SDL_SCANCODE_H
@ SDL_SCANCODE_KP_D
@ SDL_SCANCODE_SLASH
@ SDL_SCANCODE_F1
@ SDL_SCANCODE_KP_EQUALS
@ SDL_SCANCODE_F21
@ SDL_SCANCODE_KP_6
@ SDL_SCANCODE_KP_HASH
@ SDL_SCANCODE_7
@ SDL_SCANCODE_9
@ SDL_SCANCODE_KP_TAB
@ SDL_SCANCODE_KP_7
@ SDL_SCANCODE_AC_REFRESH
@ SDL_SCANCODE_INTERNATIONAL9
@ SDL_SCANCODE_KP_9
@ SDL_SCANCODE_EXSEL
@ SDL_SCANCODE_VOLUMEUP
@ SDL_SCANCODE_APP2
@ SDL_SCANCODE_INTERNATIONAL8
@ SDL_SCANCODE_CRSEL
@ SDL_SCANCODE_ENDCALL
@ SDL_SCANCODE_NUMLOCKCLEAR
@ SDL_SCANCODE_PRINTSCREEN
@ SDL_SCANCODE_KP_XOR
@ SDL_SCANCODE_POWER
@ SDL_SCANCODE_MAIL
@ SDL_SCANCODE_KP_3
@ SDL_SCANCODE_SCROLLLOCK
@ SDL_SCANCODE_EJECT
@ SDL_SCANCODE_AUDIOPREV
@ SDL_SCANCODE_PAUSE
@ SDL_SCANCODE_RETURN
@ SDL_SCANCODE_KBDILLUMTOGGLE
@ SDL_SCANCODE_KP_000
@ SDL_SCANCODE_HELP
@ SDL_SCANCODE_PAGEDOWN
@ SDL_SCANCODE_INTERNATIONAL3
@ SDL_SCANCODE_LSHIFT
@ SDL_SCANCODE_AUDIOSTOP
@ SDL_SCANCODE_TAB
@ SDL_SCANCODE_STOP
@ SDL_SCANCODE_CURRENCYSUBUNIT
@ SDL_SCANCODE_LANG1
@ SDL_SCANCODE_3
@ SDL_SCANCODE_LCTRL
@ SDL_SCANCODE_SEMICOLON
@ SDL_SCANCODE_F16
@ SDL_SCANCODE_F22
@ SDL_SCANCODE_UNKNOWN
@ SDL_SCANCODE_DISPLAYSWITCH
@ SDL_SCANCODE_KP_MEMCLEAR
@ SDL_SCANCODE_LGUI
@ SDL_SCANCODE_0
@ SDL_SCANCODE_KP_LESS
@ SDL_SCANCODE_AC_STOP
@ SDL_SCANCODE_OPER
@ SDL_SCANCODE_LEFTBRACKET
@ SDL_SCANCODE_KP_MEMSUBTRACT
@ SDL_SCANCODE_KP_A
@ SDL_SCANCODE_AC_SEARCH
@ SDL_SCANCODE_INTERNATIONAL2
@ SDL_SCANCODE_DECIMALSEPARATOR
@ SDL_SCANCODE_F19
@ SDL_SCANCODE_V
@ SDL_SCANCODE_EXECUTE
@ SDL_SCANCODE_GRAVE
@ SDL_SCANCODE_KP_LEFTBRACE
@ SDL_SCANCODE_MENU
@ SDL_SCANCODE_RALT
@ SDL_SCANCODE_MUTE
@ SDL_SCANCODE_SYSREQ
@ SDL_SCANCODE_8
@ SDL_SCANCODE_I
@ SDL_SCANCODE_LANG4
@ SDL_SCANCODE_KP_PERCENT
@ SDL_SCANCODE_F17
@ SDL_SCANCODE_RETURN2
@ SDL_SCANCODE_LANG3
@ SDL_SCANCODE_KP_MEMADD
@ SDL_SCANCODE_KP_PLUSMINUS
@ SDL_SCANCODE_INTERNATIONAL5
@ SDL_SCANCODE_THOUSANDSSEPARATOR
@ SDL_SCANCODE_6
@ SDL_SCANCODE_S
@ SDL_SCANCODE_KP_ENTER
@ SDL_SCANCODE_AC_BACK
@ SDL_SCANCODE_FIND
@ SDL_SCANCODE_KP_MEMSTORE
@ SDL_SCANCODE_PAGEUP
@ SDL_SCANCODE_Z
@ SDL_SCANCODE_COMPUTER
@ SDL_SCANCODE_AUDIOPLAY
@ SDL_SCANCODE_P
@ SDL_SCANCODE_D
@ SDL_SCANCODE_F23
@ SDL_SCANCODE_PERIOD
@ SDL_SCANCODE_CALL
@ SDL_SCANCODE_KP_MEMRECALL
@ SDL_SCANCODE_R
@ SDL_SCANCODE_KP_AT
@ SDL_SCANCODE_KP_1
@ SDL_SCANCODE_AC_BOOKMARKS
@ SDL_SCANCODE_KP_MEMMULTIPLY
@ SDL_SCANCODE_DOWN
@ SDL_SCANCODE_COPY
@ SDL_SCANCODE_RIGHT
@ SDL_SCANCODE_F7
@ SDL_SCANCODE_WWW
@ SDL_SCANCODE_INTERNATIONAL6
@ SDL_SCANCODE_MINUS
@ SDL_SCANCODE_A
@ SDL_SCANCODE_MODE
@ SDL_SCANCODE_NONUSHASH
@ SDL_SCANCODE_LANG7
@ SDL_SCANCODE_ALTERASE
@ SDL_SCANCODE_G
@ SDL_SCANCODE_KP_2
@ SDL_SCANCODE_KP_RIGHTBRACE
@ SDL_SCANCODE_U
@ SDL_SCANCODE_AGAIN
@ SDL_SCANCODE_KP_EQUALSAS400
@ SDL_SCANCODE_KP_MULTIPLY
@ SDL_SCANCODE_KP_C
@ SDL_SCANCODE_KP_POWER
@ SDL_SCANCODE_AUDIOREWIND
@ SDL_SCANCODE_4
@ SDL_SCANCODE_KP_DBLVERTICALBAR
@ SDL_SCANCODE_APP1
@ SDL_SCANCODE_F9
@ SDL_SCANCODE_F5
@ SDL_SCANCODE_BRIGHTNESSDOWN
@ SDL_NUM_SCANCODES
@ SDL_SCANCODE_UP
@ SDL_SCANCODE_LEFT
@ SDL_SCANCODE_AUDIONEXT
@ SDL_SCANCODE_KBDILLUMDOWN
@ SDL_SCANCODE_KP_BINARY
@ SDL_SCANCODE_SELECT
@ SDL_SCANCODE_APPLICATION
@ SDL_SCANCODE_LANG5
@ SDL_SCANCODE_KP_4
@ SDL_SCANCODE_C
@ SDL_SCANCODE_HOME
@ SDL_SCANCODE_F14
@ SDL_SCANCODE_T
@ SDL_SCANCODE_KP_CLEAR
@ SDL_SCANCODE_AUDIOFASTFORWARD
@ SDL_SCANCODE_KBDILLUMUP
@ SDL_SCANCODE_F8
@ SDL_SCANCODE_LALT
@ SDL_SCANCODE_KP_8
@ SDL_SCANCODE_PASTE
@ SDL_SCANCODE_RCTRL
@ SDL_SCANCODE_F20
@ SDL_SCANCODE_KP_5
@ SDL_SCANCODE_L
@ SDL_SCANCODE_UNDO
@ SDL_SCANCODE_KP_DBLAMPERSAND
@ SDL_SCANCODE_CLEAR
@ SDL_SCANCODE_LANG6
@ SDL_SCANCODE_AC_HOME
@ SDL_SCANCODE_VOLUMEDOWN
@ SDL_SCANCODE_SOFTRIGHT
@ SDL_SCANCODE_SLEEP
@ SDL_SCANCODE_KP_DIVIDE
@ SDL_SCANCODE_PRIOR
@ SDL_SCANCODE_F18
@ SDL_SCANCODE_F13
@ SDL_SCANCODE_CURRENCYUNIT
@ SDL_SCANCODE_N
@ SDL_SCANCODE_SOFTLEFT
@ SDL_SCANCODE_MEDIASELECT
@ SDL_SCANCODE_BACKSPACE
@ SDL_SCANCODE_LANG9
@ SDL_SCANCODE_EQUALS
@ SDL_SCANCODE_SPACE
@ SDL_SCANCODE_SEPARATOR
@ SDL_SCANCODE_RSHIFT
@ SDL_SCANCODE_INSERT
@ SDL_SCANCODE_AC_FORWARD
@ SDL_SCANCODE_KP_MEMDIVIDE
@ SDL_SCANCODE_J
@ SDL_SCANCODE_1
@ SDL_SCANCODE_Q