scancodes_windows.h 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. /*
  2. Simple DirectMedia Layer
  3. Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
  4. This software is provided 'as-is', without any express or implied
  5. warranty. In no event will the authors be held liable for any damages
  6. arising from the use of this software.
  7. Permission is granted to anyone to use this software for any purpose,
  8. including commercial applications, and to alter it and redistribute it
  9. freely, subject to the following restrictions:
  10. 1. The origin of this software must not be misrepresented; you must not
  11. claim that you wrote the original software. If you use this software
  12. in a product, an acknowledgment in the product documentation would be
  13. appreciated but is not required.
  14. 2. Altered source versions must be plainly marked as such, and must not be
  15. misrepresented as being the original software.
  16. 3. This notice may not be removed or altered from any source distribution.
  17. */
  18. #include "SDL_internal.h"
  19. /*
  20. * Windows scancode to SDL scancode mapping table
  21. * https://learn.microsoft.com/windows/win32/inputdev/about-keyboard-input#scan-codes */
  22. /* *INDENT-OFF* */ // clang-format off
  23. static const SDL_Scancode windows_scancode_table[] = {
  24. /*0x00*/ SDL_SCANCODE_UNKNOWN,
  25. /*0x01*/ SDL_SCANCODE_ESCAPE,
  26. /*0x02*/ SDL_SCANCODE_1,
  27. /*0x03*/ SDL_SCANCODE_2,
  28. /*0x04*/ SDL_SCANCODE_3,
  29. /*0x05*/ SDL_SCANCODE_4,
  30. /*0x06*/ SDL_SCANCODE_5,
  31. /*0x07*/ SDL_SCANCODE_6,
  32. /*0x08*/ SDL_SCANCODE_7,
  33. /*0x09*/ SDL_SCANCODE_8,
  34. /*0x0a*/ SDL_SCANCODE_9,
  35. /*0x0b*/ SDL_SCANCODE_0,
  36. /*0x0c*/ SDL_SCANCODE_MINUS,
  37. /*0x0d*/ SDL_SCANCODE_EQUALS,
  38. /*0x0e*/ SDL_SCANCODE_BACKSPACE,
  39. /*0x0f*/ SDL_SCANCODE_TAB,
  40. /*0x10*/ SDL_SCANCODE_Q,
  41. /*0x11*/ SDL_SCANCODE_W,
  42. /*0x12*/ SDL_SCANCODE_E,
  43. /*0x13*/ SDL_SCANCODE_R,
  44. /*0x14*/ SDL_SCANCODE_T,
  45. /*0x15*/ SDL_SCANCODE_Y,
  46. /*0x16*/ SDL_SCANCODE_U,
  47. /*0x17*/ SDL_SCANCODE_I,
  48. /*0x18*/ SDL_SCANCODE_O,
  49. /*0x19*/ SDL_SCANCODE_P,
  50. /*0x1a*/ SDL_SCANCODE_LEFTBRACKET,
  51. /*0x1b*/ SDL_SCANCODE_RIGHTBRACKET,
  52. /*0x1c*/ SDL_SCANCODE_RETURN,
  53. /*0x1d*/ SDL_SCANCODE_LCTRL,
  54. /*0x1e*/ SDL_SCANCODE_A,
  55. /*0x1f*/ SDL_SCANCODE_S,
  56. /*0x20*/ SDL_SCANCODE_D,
  57. /*0x21*/ SDL_SCANCODE_F,
  58. /*0x22*/ SDL_SCANCODE_G,
  59. /*0x23*/ SDL_SCANCODE_H,
  60. /*0x24*/ SDL_SCANCODE_J,
  61. /*0x25*/ SDL_SCANCODE_K,
  62. /*0x26*/ SDL_SCANCODE_L,
  63. /*0x27*/ SDL_SCANCODE_SEMICOLON,
  64. /*0x28*/ SDL_SCANCODE_APOSTROPHE,
  65. /*0x29*/ SDL_SCANCODE_GRAVE,
  66. /*0x2a*/ SDL_SCANCODE_LSHIFT,
  67. /*0x2b*/ SDL_SCANCODE_BACKSLASH,
  68. /*0x2c*/ SDL_SCANCODE_Z,
  69. /*0x2d*/ SDL_SCANCODE_X,
  70. /*0x2e*/ SDL_SCANCODE_C,
  71. /*0x2f*/ SDL_SCANCODE_V,
  72. /*0x30*/ SDL_SCANCODE_B,
  73. /*0x31*/ SDL_SCANCODE_N,
  74. /*0x32*/ SDL_SCANCODE_M,
  75. /*0x33*/ SDL_SCANCODE_COMMA,
  76. /*0x34*/ SDL_SCANCODE_PERIOD,
  77. /*0x35*/ SDL_SCANCODE_SLASH,
  78. /*0x36*/ SDL_SCANCODE_RSHIFT,
  79. /*0x37*/ SDL_SCANCODE_KP_MULTIPLY,
  80. /*0x38*/ SDL_SCANCODE_LALT,
  81. /*0x39*/ SDL_SCANCODE_SPACE,
  82. /*0x3a*/ SDL_SCANCODE_CAPSLOCK,
  83. /*0x3b*/ SDL_SCANCODE_F1,
  84. /*0x3c*/ SDL_SCANCODE_F2,
  85. /*0x3d*/ SDL_SCANCODE_F3,
  86. /*0x3e*/ SDL_SCANCODE_F4,
  87. /*0x3f*/ SDL_SCANCODE_F5,
  88. /*0x40*/ SDL_SCANCODE_F6,
  89. /*0x41*/ SDL_SCANCODE_F7,
  90. /*0x42*/ SDL_SCANCODE_F8,
  91. /*0x43*/ SDL_SCANCODE_F9,
  92. /*0x44*/ SDL_SCANCODE_F10,
  93. /*0x45*/ SDL_SCANCODE_NUMLOCKCLEAR,
  94. /*0x46*/ SDL_SCANCODE_SCROLLLOCK,
  95. /*0x47*/ SDL_SCANCODE_KP_7,
  96. /*0x48*/ SDL_SCANCODE_KP_8,
  97. /*0x49*/ SDL_SCANCODE_KP_9,
  98. /*0x4a*/ SDL_SCANCODE_KP_MINUS,
  99. /*0x4b*/ SDL_SCANCODE_KP_4,
  100. /*0x4c*/ SDL_SCANCODE_KP_5,
  101. /*0x4d*/ SDL_SCANCODE_KP_6,
  102. /*0x4e*/ SDL_SCANCODE_KP_PLUS,
  103. /*0x4f*/ SDL_SCANCODE_KP_1,
  104. /*0x50*/ SDL_SCANCODE_KP_2,
  105. /*0x51*/ SDL_SCANCODE_KP_3,
  106. /*0x52*/ SDL_SCANCODE_KP_0,
  107. /*0x53*/ SDL_SCANCODE_KP_PERIOD,
  108. /*0x54*/ SDL_SCANCODE_UNKNOWN,
  109. /*0x55*/ SDL_SCANCODE_UNKNOWN,
  110. /*0x56*/ SDL_SCANCODE_NONUSBACKSLASH,
  111. /*0x57*/ SDL_SCANCODE_F11,
  112. /*0x58*/ SDL_SCANCODE_F12,
  113. /*0x59*/ SDL_SCANCODE_KP_EQUALS,
  114. /*0x5a*/ SDL_SCANCODE_UNKNOWN,
  115. /*0x5b*/ SDL_SCANCODE_UNKNOWN,
  116. /*0x5c*/ SDL_SCANCODE_INTERNATIONAL6,
  117. /*0x5d*/ SDL_SCANCODE_UNKNOWN,
  118. /*0x5e*/ SDL_SCANCODE_UNKNOWN,
  119. /*0x5f*/ SDL_SCANCODE_UNKNOWN,
  120. /*0x60*/ SDL_SCANCODE_UNKNOWN,
  121. /*0x61*/ SDL_SCANCODE_UNKNOWN,
  122. /*0x62*/ SDL_SCANCODE_UNKNOWN,
  123. /*0x63*/ SDL_SCANCODE_UNKNOWN,
  124. /*0x64*/ SDL_SCANCODE_F13,
  125. /*0x65*/ SDL_SCANCODE_F14,
  126. /*0x66*/ SDL_SCANCODE_F15,
  127. /*0x67*/ SDL_SCANCODE_F16,
  128. /*0x68*/ SDL_SCANCODE_F17,
  129. /*0x69*/ SDL_SCANCODE_F18,
  130. /*0x6a*/ SDL_SCANCODE_F19,
  131. /*0x6b*/ SDL_SCANCODE_F20,
  132. /*0x6c*/ SDL_SCANCODE_F21,
  133. /*0x6d*/ SDL_SCANCODE_F22,
  134. /*0x6e*/ SDL_SCANCODE_F23,
  135. /*0x6f*/ SDL_SCANCODE_UNKNOWN,
  136. /*0x70*/ SDL_SCANCODE_INTERNATIONAL2,
  137. /*0x71*/ SDL_SCANCODE_LANG2,
  138. /*0x72*/ SDL_SCANCODE_LANG1,
  139. /*0x73*/ SDL_SCANCODE_INTERNATIONAL1,
  140. /*0x74*/ SDL_SCANCODE_UNKNOWN,
  141. /*0x75*/ SDL_SCANCODE_UNKNOWN,
  142. /*0x76*/ SDL_SCANCODE_F24,
  143. /*0x77*/ SDL_SCANCODE_LANG4,
  144. /*0x78*/ SDL_SCANCODE_LANG3,
  145. /*0x79*/ SDL_SCANCODE_INTERNATIONAL4,
  146. /*0x7a*/ SDL_SCANCODE_UNKNOWN,
  147. /*0x7b*/ SDL_SCANCODE_INTERNATIONAL5,
  148. /*0x7c*/ SDL_SCANCODE_UNKNOWN,
  149. /*0x7d*/ SDL_SCANCODE_INTERNATIONAL3,
  150. /*0x7e*/ SDL_SCANCODE_KP_COMMA,
  151. /*0x7f*/ SDL_SCANCODE_UNKNOWN,
  152. /*0xe000*/ SDL_SCANCODE_UNKNOWN,
  153. /*0xe001*/ SDL_SCANCODE_UNKNOWN,
  154. /*0xe002*/ SDL_SCANCODE_UNKNOWN,
  155. /*0xe003*/ SDL_SCANCODE_UNKNOWN,
  156. /*0xe004*/ SDL_SCANCODE_UNKNOWN,
  157. /*0xe005*/ SDL_SCANCODE_UNKNOWN,
  158. /*0xe006*/ SDL_SCANCODE_UNKNOWN,
  159. /*0xe007*/ SDL_SCANCODE_UNKNOWN,
  160. /*0xe008*/ SDL_SCANCODE_UNKNOWN,
  161. /*0xe009*/ SDL_SCANCODE_UNKNOWN,
  162. /*0xe00a*/ SDL_SCANCODE_PASTE,
  163. /*0xe00b*/ SDL_SCANCODE_UNKNOWN,
  164. /*0xe00c*/ SDL_SCANCODE_UNKNOWN,
  165. /*0xe00d*/ SDL_SCANCODE_UNKNOWN,
  166. /*0xe00e*/ SDL_SCANCODE_UNKNOWN,
  167. /*0xe00f*/ SDL_SCANCODE_UNKNOWN,
  168. /*0xe010*/ SDL_SCANCODE_MEDIA_PREVIOUS_TRACK,
  169. /*0xe011*/ SDL_SCANCODE_UNKNOWN,
  170. /*0xe012*/ SDL_SCANCODE_UNKNOWN,
  171. /*0xe013*/ SDL_SCANCODE_UNKNOWN,
  172. /*0xe014*/ SDL_SCANCODE_UNKNOWN,
  173. /*0xe015*/ SDL_SCANCODE_UNKNOWN,
  174. /*0xe016*/ SDL_SCANCODE_UNKNOWN,
  175. /*0xe017*/ SDL_SCANCODE_CUT,
  176. /*0xe018*/ SDL_SCANCODE_COPY,
  177. /*0xe019*/ SDL_SCANCODE_MEDIA_NEXT_TRACK,
  178. /*0xe01a*/ SDL_SCANCODE_UNKNOWN,
  179. /*0xe01b*/ SDL_SCANCODE_UNKNOWN,
  180. /*0xe01c*/ SDL_SCANCODE_KP_ENTER,
  181. /*0xe01d*/ SDL_SCANCODE_RCTRL,
  182. /*0xe01e*/ SDL_SCANCODE_UNKNOWN,
  183. /*0xe01f*/ SDL_SCANCODE_UNKNOWN,
  184. /*0xe020*/ SDL_SCANCODE_MUTE,
  185. /*0xe021*/ SDL_SCANCODE_UNKNOWN, // LaunchApp2
  186. /*0xe022*/ SDL_SCANCODE_MEDIA_PLAY_PAUSE,
  187. /*0xe023*/ SDL_SCANCODE_UNKNOWN,
  188. /*0xe024*/ SDL_SCANCODE_MEDIA_STOP,
  189. /*0xe025*/ SDL_SCANCODE_UNKNOWN,
  190. /*0xe026*/ SDL_SCANCODE_UNKNOWN,
  191. /*0xe027*/ SDL_SCANCODE_UNKNOWN,
  192. /*0xe028*/ SDL_SCANCODE_UNKNOWN,
  193. /*0xe029*/ SDL_SCANCODE_UNKNOWN,
  194. /*0xe02a*/ SDL_SCANCODE_UNKNOWN,
  195. /*0xe02b*/ SDL_SCANCODE_UNKNOWN,
  196. /*0xe02c*/ SDL_SCANCODE_MEDIA_EJECT,
  197. /*0xe02d*/ SDL_SCANCODE_UNKNOWN,
  198. /*0xe02e*/ SDL_SCANCODE_VOLUMEDOWN,
  199. /*0xe02f*/ SDL_SCANCODE_UNKNOWN,
  200. /*0xe030*/ SDL_SCANCODE_VOLUMEUP,
  201. /*0xe031*/ SDL_SCANCODE_UNKNOWN,
  202. /*0xe032*/ SDL_SCANCODE_AC_HOME,
  203. /*0xe033*/ SDL_SCANCODE_UNKNOWN,
  204. /*0xe034*/ SDL_SCANCODE_UNKNOWN,
  205. /*0xe035*/ SDL_SCANCODE_KP_DIVIDE,
  206. /*0xe036*/ SDL_SCANCODE_UNKNOWN,
  207. /*0xe037*/ SDL_SCANCODE_PRINTSCREEN,
  208. /*0xe038*/ SDL_SCANCODE_RALT,
  209. /*0xe039*/ SDL_SCANCODE_UNKNOWN,
  210. /*0xe03a*/ SDL_SCANCODE_UNKNOWN,
  211. /*0xe03b*/ SDL_SCANCODE_HELP,
  212. /*0xe03c*/ SDL_SCANCODE_UNKNOWN,
  213. /*0xe03d*/ SDL_SCANCODE_UNKNOWN,
  214. /*0xe03e*/ SDL_SCANCODE_UNKNOWN,
  215. /*0xe03f*/ SDL_SCANCODE_UNKNOWN,
  216. /*0xe040*/ SDL_SCANCODE_UNKNOWN,
  217. /*0xe041*/ SDL_SCANCODE_UNKNOWN,
  218. /*0xe042*/ SDL_SCANCODE_UNKNOWN,
  219. /*0xe043*/ SDL_SCANCODE_UNKNOWN,
  220. /*0xe044*/ SDL_SCANCODE_UNKNOWN,
  221. /*0xe045*/ SDL_SCANCODE_NUMLOCKCLEAR,
  222. /*0xe046*/ SDL_SCANCODE_PAUSE,
  223. /*0xe047*/ SDL_SCANCODE_HOME,
  224. /*0xe048*/ SDL_SCANCODE_UP,
  225. /*0xe049*/ SDL_SCANCODE_PAGEUP,
  226. /*0xe04a*/ SDL_SCANCODE_UNKNOWN,
  227. /*0xe04b*/ SDL_SCANCODE_LEFT,
  228. /*0xe04c*/ SDL_SCANCODE_UNKNOWN,
  229. /*0xe04d*/ SDL_SCANCODE_RIGHT,
  230. /*0xe04e*/ SDL_SCANCODE_UNKNOWN,
  231. /*0xe04f*/ SDL_SCANCODE_END,
  232. /*0xe050*/ SDL_SCANCODE_DOWN,
  233. /*0xe051*/ SDL_SCANCODE_PAGEDOWN,
  234. /*0xe052*/ SDL_SCANCODE_INSERT,
  235. /*0xe053*/ SDL_SCANCODE_DELETE,
  236. /*0xe054*/ SDL_SCANCODE_UNKNOWN,
  237. /*0xe055*/ SDL_SCANCODE_UNKNOWN,
  238. /*0xe056*/ SDL_SCANCODE_UNKNOWN,
  239. /*0xe057*/ SDL_SCANCODE_UNKNOWN,
  240. /*0xe058*/ SDL_SCANCODE_UNKNOWN,
  241. /*0xe059*/ SDL_SCANCODE_UNKNOWN,
  242. /*0xe05a*/ SDL_SCANCODE_UNKNOWN,
  243. /*0xe05b*/ SDL_SCANCODE_LGUI,
  244. /*0xe05c*/ SDL_SCANCODE_RGUI,
  245. /*0xe05d*/ SDL_SCANCODE_APPLICATION,
  246. /*0xe05e*/ SDL_SCANCODE_POWER,
  247. /*0xe05f*/ SDL_SCANCODE_SLEEP,
  248. /*0xe060*/ SDL_SCANCODE_UNKNOWN,
  249. /*0xe061*/ SDL_SCANCODE_UNKNOWN,
  250. /*0xe062*/ SDL_SCANCODE_UNKNOWN,
  251. /*0xe063*/ SDL_SCANCODE_UNKNOWN,
  252. /*0xe064*/ SDL_SCANCODE_UNKNOWN,
  253. /*0xe065*/ SDL_SCANCODE_AC_SEARCH,
  254. /*0xe066*/ SDL_SCANCODE_AC_BOOKMARKS,
  255. /*0xe067*/ SDL_SCANCODE_AC_REFRESH,
  256. /*0xe068*/ SDL_SCANCODE_AC_STOP,
  257. /*0xe069*/ SDL_SCANCODE_AC_FORWARD,
  258. /*0xe06a*/ SDL_SCANCODE_AC_BACK,
  259. /*0xe06b*/ SDL_SCANCODE_UNKNOWN, // LaunchApp1
  260. /*0xe06c*/ SDL_SCANCODE_UNKNOWN, // LaunchMail
  261. /*0xe06d*/ SDL_SCANCODE_MEDIA_SELECT,
  262. /*0xe06e*/ SDL_SCANCODE_UNKNOWN,
  263. /*0xe06f*/ SDL_SCANCODE_UNKNOWN,
  264. /*0xe070*/ SDL_SCANCODE_UNKNOWN,
  265. /*0xe071*/ SDL_SCANCODE_UNKNOWN,
  266. /*0xe072*/ SDL_SCANCODE_UNKNOWN,
  267. /*0xe073*/ SDL_SCANCODE_UNKNOWN,
  268. /*0xe074*/ SDL_SCANCODE_UNKNOWN,
  269. /*0xe075*/ SDL_SCANCODE_UNKNOWN,
  270. /*0xe076*/ SDL_SCANCODE_UNKNOWN,
  271. /*0xe077*/ SDL_SCANCODE_UNKNOWN,
  272. /*0xe078*/ SDL_SCANCODE_UNKNOWN,
  273. /*0xe079*/ SDL_SCANCODE_UNKNOWN,
  274. /*0xe07a*/ SDL_SCANCODE_UNKNOWN,
  275. /*0xe07b*/ SDL_SCANCODE_UNKNOWN,
  276. /*0xe07c*/ SDL_SCANCODE_UNKNOWN,
  277. /*0xe07d*/ SDL_SCANCODE_UNKNOWN,
  278. /*0xe07e*/ SDL_SCANCODE_UNKNOWN,
  279. /*0xe07f*/ SDL_SCANCODE_UNKNOWN
  280. };
  281. /* *INDENT-ON* */ // clang-format on