ReactOS 0.4.17-dev-1190-g4c812f4
kbdfo.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Keyboard Layouts
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Faeroese (fo-FO) keyboard layout
5 * COPYRIGHT: Copyright 2026 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 */
7
8#define WIN32_NO_STATUS
9#include <windef.h>
10#include <winuser.h>
11#include <ndk/kbd.h>
12
13/* See also: https://kbdlayout.info/kbdfo */
14
15#ifdef _M_IA64
16 #define ROSDATA static __declspec(allocate(".data"))
17#else
18 #ifdef _MSC_VER
19 #pragma data_seg(".data")
20 #define ROSDATA static
21 #else
22 #define ROSDATA static __attribute__((section(".data")))
23 #endif
24#endif
25
26#define VK_EMPTY 0xff /* The non-existent VK */
27#define KNUMS (KBDNUMPAD | KBDSPECIAL) /* Special + number pad */
28#define KMEXT (KBDEXT | KBDMULTIVK) /* Multi + ext */
29#define DEADTRANS(ch, accent, comp, flags) { MAKELONG(ch, accent), comp, flags }
30
32 /* 00 */
33 VK_EMPTY, VK_ESCAPE, '1', '2',
34 '3', '4', '5', '6',
35 '7', '8','9', '0',
36 VK_OEM_PLUS, VK_OEM_4, VK_BACK, VK_TAB,
37 /* 10 */
38 'Q', 'W', 'E', 'R',
39 'T', 'Y', 'U', 'I',
40 'O', 'P', VK_OEM_6, VK_OEM_1,
41 VK_RETURN, VK_LCONTROL, 'A', 'S',
42 /* 20 */
43 'D', 'F', 'G', 'H',
44 'J', 'K', 'L', VK_OEM_3,
46 'Z', 'X', 'C', 'V',
47 /* 30 */
48 'B', 'N', 'M', VK_OEM_COMMA,
49 VK_OEM_PERIOD, VK_OEM_MINUS, VK_RSHIFT | KBDEXT, VK_MULTIPLY | KBDMULTIVK,
52 /* 40 */
53 VK_F6, VK_F7,
54 VK_F8, VK_F9,
61 /* 50 */
65 VK_OEM_102, VK_F11,
70 /* 60 */
75 /* 70 */
80};
81
83 { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
84 { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
85 { 0x1d, VK_RCONTROL | KBDEXT },
86 { 0x20, VK_VOLUME_MUTE | KBDEXT },
87 { 0x21, VK_LAUNCH_APP2 | KBDEXT },
88 { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
89 { 0x24, VK_MEDIA_STOP | KBDEXT },
90 { 0x2e, VK_VOLUME_DOWN | KBDEXT },
91 { 0x30, VK_VOLUME_UP | KBDEXT },
92 { 0x32, VK_BROWSER_HOME | KBDEXT },
93 { 0x35, VK_DIVIDE | KBDEXT },
94 { 0x37, VK_SNAPSHOT | KBDEXT },
95 { 0x38, VK_RMENU | KBDEXT },
96 { 0x47, VK_HOME | KBDEXT },
97 { 0x48, VK_UP | KBDEXT },
98 { 0x49, VK_PRIOR | KBDEXT },
99 { 0x4b, VK_LEFT | KBDEXT },
100 { 0x4d, VK_RIGHT | KBDEXT },
101 { 0x4f, VK_END | KBDEXT },
102 { 0x50, VK_DOWN | KBDEXT },
103 { 0x51, VK_NEXT | KBDEXT },
104 { 0x52, VK_INSERT | KBDEXT },
105 { 0x53, VK_DELETE | KBDEXT },
106 { 0x5b, VK_LWIN | KBDEXT },
107 { 0x5c, VK_RWIN | KBDEXT },
108 { 0x5d, VK_APPS | KBDEXT },
109 { 0x5f, VK_SLEEP | KBDEXT },
110 { 0x65, VK_BROWSER_SEARCH | KBDEXT },
111 { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
112 { 0x67, VK_BROWSER_REFRESH | KBDEXT },
113 { 0x68, VK_BROWSER_STOP | KBDEXT },
114 { 0x69, VK_BROWSER_FORWARD | KBDEXT },
115 { 0x6a, VK_BROWSER_BACK | KBDEXT },
116 { 0x6b, VK_LAUNCH_APP1 | KBDEXT },
117 { 0x6c, VK_LAUNCH_MAIL | KBDEXT },
118 { 0x6d, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
119 { 0x1c, VK_RETURN | KBDEXT },
120 { 0x46, VK_CANCEL | KBDEXT },
121 { 0, 0 },
122};
123
125 { 0x1d, VK_PAUSE },
126 { 0, 0 },
127};
128
130 { VK_SHIFT, KBDSHIFT },
131 { VK_CONTROL, KBDCTRL },
132 { VK_MENU, KBDALT },
133 { 0, 0 }
134};
135
137{
139 6,
140 {
141 0, /* NONE */
142 1, /* SHIFT */
143 3, /* CTRL */
144 4, /* SHIFT+CTRL */
145 SHFT_INVALID, /* ALT */
146 SHFT_INVALID, /* SHIFT+ALT */
147 2, /* CTRL+ALT (AltGr) */
148 }
149};
150
151/* Column order: Normal, Shift, AltGr, Ctrl, Shift+Ctrl
152 * (see ModNumber in modifier_bits). A row with VK_EMPTY (0xff)
153 * following a WCH_DEAD entry gives the dead character itself. */
154ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
155 { '2' , 0, { '2', '\"', '@' } },
156 { '3' , 0, { '3', '#', 0xa3 /* £ */ } },
157 { '4' , 0, { '4', 0xa4 /* ¤ */, '$' } },
158 { '5' , 0, { '5', '%', 0x20ac /* € */ } },
159 { '7' , 0, { '7', '/', '{' } },
160 { '8' , 0, { '8', '(', '[' } },
161 { '9' , 0, { '9', ')', ']' } },
162 { '0' , 0, { '0', '=', '}' } },
163 { VK_OEM_4, 0, { WCH_DEAD, WCH_DEAD, '|' } },
164 { VK_EMPTY, 0, { 0xb4 /* ´ */, '`', WCH_NONE } }, /* dead chars of the key above */
165 { 'E' , CAPLOK, { 'e', 'E', 0x20ac /* € */ } },
166 { VK_OEM_7, CAPLOK, { 0xf8 /* ø */, 0xd8 /* Ø */, WCH_DEAD } },
167 { VK_EMPTY, 0, { WCH_NONE, WCH_NONE, '^' } },
168 { 'M' , CAPLOK, { 'm', 'M', 0xb5 /* µ */ } },
169 { 0, 0 }
170};
171
172ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
173 { VK_OEM_5 , 0, { 0xbd /* ½ */, 0xa7 /* § */, WCH_NONE, 0x1c } },
174 { VK_OEM_6 , CAPLOK, { 0xe5 /* å */, 0xc5 /* Å */, WCH_DEAD, 0x1b } },
175 { VK_EMPTY , 0, { WCH_NONE, WCH_NONE, 0xa8 /* ¨ */, WCH_NONE } },
176 { VK_OEM_1 , CAPLOK, { 0xf0 /* ð */, 0xd0 /* Ð */, WCH_DEAD, 0x1d } },
177 { VK_EMPTY , 0, { WCH_NONE, WCH_NONE, '~', WCH_NONE } },
178 { VK_OEM_MINUS, 0, { '-', '_', WCH_NONE, 0x1f } },
179 { VK_OEM_102 , 0, { '<', '>', '\\', 0x1c } },
180 { VK_BACK , 0, { 0x08, 0x08, WCH_NONE, 0x7f } },
181 { VK_ESCAPE , 0, { 0x1b, 0x1b, WCH_NONE, 0x1b } },
182 { VK_RETURN , 0, { '\r', '\r', WCH_NONE, '\n' } },
183 { VK_SPACE , 0, { ' ', ' ', WCH_NONE, ' ' } },
184 { VK_CANCEL , 0, { 0x03, 0x03, WCH_NONE, 0x03 } },
185 { 0, 0 }
186};
187
188ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
189 { '6', 0, { '6', '&', WCH_NONE, WCH_NONE, 0x1e } },
190 { 0, 0 }
191};
192
193ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
194 { '1' , 0, { '1', '!' } },
195 { VK_OEM_PLUS , 0, { '+', '?' } },
196 { 'Q' , CAPLOK, { 'q', 'Q' } },
197 { 'W' , CAPLOK, { 'w', 'W' } },
198 { 'R' , CAPLOK, { 'r', 'R' } },
199 { 'T' , CAPLOK, { 't', 'T' } },
200 { 'Y' , CAPLOK, { 'y', 'Y' } },
201 { 'U' , CAPLOK, { 'u', 'U' } },
202 { 'I' , CAPLOK, { 'i', 'I' } },
203 { 'O' , CAPLOK, { 'o', 'O' } },
204 { 'P' , CAPLOK, { 'p', 'P' } },
205 { VK_OEM_2 , 0, { '\'', '*' } },
206 { 'A' , CAPLOK, { 'a', 'A' } },
207 { 'S' , CAPLOK, { 's', 'S' } },
208 { 'D' , CAPLOK, { 'd', 'D' } },
209 { 'F' , CAPLOK, { 'f', 'F' } },
210 { 'G' , CAPLOK, { 'g', 'G' } },
211 { 'H' , CAPLOK, { 'h', 'H' } },
212 { 'J' , CAPLOK, { 'j', 'J' } },
213 { 'K' , CAPLOK, { 'k', 'K' } },
214 { 'L' , CAPLOK, { 'l', 'L' } },
215 { VK_OEM_3 , CAPLOK, { 0xe6 /* æ */, 0xc6 /* Æ */ } },
216 { 'Z' , CAPLOK, { 'z', 'Z' } },
217 { 'X' , CAPLOK, { 'x', 'X' } },
218 { 'C' , CAPLOK, { 'c', 'C' } },
219 { 'V' , CAPLOK, { 'v', 'V' } },
220 { 'B' , CAPLOK, { 'b', 'B' } },
221 { 'N' , CAPLOK, { 'n', 'N' } },
222 { VK_OEM_COMMA , 0, { ',', ';' } },
223 { VK_OEM_PERIOD , 0, { '.', ':' } },
224 { VK_DECIMAL , 0, { ',', ',' } },
225 { VK_TAB , 0, { '\t', '\t' } },
226 { VK_ADD , 0, { '+', '+' } },
227 { VK_DIVIDE , 0, { '/', '/' } },
228 { VK_MULTIPLY , 0, { '*', '*' } },
229 { VK_SUBTRACT , 0, { '-', '-' } },
230 { 0, 0 }
231};
232
233ROSDATA VK_TO_WCHARS1 key_to_chars_1mod[] = {
234 { VK_NUMPAD0, 0, { '0' } },
235 { VK_NUMPAD1, 0, { '1' } },
236 { VK_NUMPAD2, 0, { '2' } },
237 { VK_NUMPAD3, 0, { '3' } },
238 { VK_NUMPAD4, 0, { '4' } },
239 { VK_NUMPAD5, 0, { '5' } },
240 { VK_NUMPAD6, 0, { '6' } },
241 { VK_NUMPAD7, 0, { '7' } },
242 { VK_NUMPAD8, 0, { '8' } },
243 { VK_NUMPAD9, 0, { '9' } },
244 { 0, 0 }
245};
246
247#define vk_master(n, x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
248
255 { 0, 0, 0 }
256};
257
259 DEADTRANS('a', 0xb4 /* ´ */, 0xe1 /* á */, 0x0000),
260 DEADTRANS('e', 0xb4 /* ´ */, 0xe9 /* é */, 0x0000),
261 DEADTRANS('i', 0xb4 /* ´ */, 0xed /* í */, 0x0000),
262 DEADTRANS('o', 0xb4 /* ´ */, 0xf3 /* ó */, 0x0000),
263 DEADTRANS('u', 0xb4 /* ´ */, 0xfa /* ú */, 0x0000),
264 DEADTRANS('y', 0xb4 /* ´ */, 0xfd /* ý */, 0x0000),
265 DEADTRANS('A', 0xb4 /* ´ */, 0xc1 /* Á */, 0x0000),
266 DEADTRANS('E', 0xb4 /* ´ */, 0xc9 /* É */, 0x0000),
267 DEADTRANS('I', 0xb4 /* ´ */, 0xcd /* Í */, 0x0000),
268 DEADTRANS('O', 0xb4 /* ´ */, 0xd3 /* Ó */, 0x0000),
269 DEADTRANS('U', 0xb4 /* ´ */, 0xda /* Ú */, 0x0000),
270 DEADTRANS('Y', 0xb4 /* ´ */, 0xdd /* Ý */, 0x0000),
271 DEADTRANS(' ', 0xb4 /* ´ */, 0xb4 /* ´ */, 0x0000),
272 DEADTRANS('a', '`', 0xe0 /* à */, 0x0000),
273 DEADTRANS('e', '`', 0xe8 /* è */, 0x0000),
274 DEADTRANS('i', '`', 0xec /* ì */, 0x0000),
275 DEADTRANS('o', '`', 0xf2 /* ò */, 0x0000),
276 DEADTRANS('u', '`', 0xf9 /* ù */, 0x0000),
277 DEADTRANS('A', '`', 0xc0 /* À */, 0x0000),
278 DEADTRANS('E', '`', 0xc8 /* È */, 0x0000),
279 DEADTRANS('I', '`', 0xcc /* Ì */, 0x0000),
280 DEADTRANS('O', '`', 0xd2 /* Ò */, 0x0000),
281 DEADTRANS('U', '`', 0xd9 /* Ù */, 0x0000),
282 DEADTRANS(' ', '`', '`', 0x0000),
283 DEADTRANS('a', 0xa8 /* ¨ */, 0xe4 /* ä */, 0x0000),
284 DEADTRANS('e', 0xa8 /* ¨ */, 0xeb /* ë */, 0x0000),
285 DEADTRANS('i', 0xa8 /* ¨ */, 0xef /* ï */, 0x0000),
286 DEADTRANS('o', 0xa8 /* ¨ */, 0xf6 /* ö */, 0x0000),
287 DEADTRANS('u', 0xa8 /* ¨ */, 0xfc /* ü */, 0x0000),
288 DEADTRANS('y', 0xa8 /* ¨ */, 0xff /* ÿ */, 0x0000),
289 DEADTRANS('A', 0xa8 /* ¨ */, 0xc4 /* Ä */, 0x0000),
290 DEADTRANS('E', 0xa8 /* ¨ */, 0xcb /* Ë */, 0x0000),
291 DEADTRANS('I', 0xa8 /* ¨ */, 0xcf /* Ï */, 0x0000),
292 DEADTRANS('O', 0xa8 /* ¨ */, 0xd6 /* Ö */, 0x0000),
293 DEADTRANS('U', 0xa8 /* ¨ */, 0xdc /* Ü */, 0x0000),
294 DEADTRANS(' ', 0xa8 /* ¨ */, 0xa8 /* ¨ */, 0x0000),
295 DEADTRANS('a', '^', 0xe2 /* â */, 0x0000),
296 DEADTRANS('e', '^', 0xea /* ê */, 0x0000),
297 DEADTRANS('i', '^', 0xee /* î */, 0x0000),
298 DEADTRANS('o', '^', 0xf4 /* ô */, 0x0000),
299 DEADTRANS('u', '^', 0xfb /* û */, 0x0000),
300 DEADTRANS('A', '^', 0xc2 /* Â */, 0x0000),
301 DEADTRANS('E', '^', 0xca /* Ê */, 0x0000),
302 DEADTRANS('I', '^', 0xce /* Î */, 0x0000),
303 DEADTRANS('O', '^', 0xd4 /* Ô */, 0x0000),
304 DEADTRANS('U', '^', 0xdb /* Û */, 0x0000),
305 DEADTRANS(' ', '^', '^', 0x0000),
306 DEADTRANS('a', '~', 0xe3 /* ã */, 0x0000),
307 DEADTRANS('o', '~', 0xf5 /* õ */, 0x0000),
308 DEADTRANS('n', '~', 0xf1 /* ñ */, 0x0000),
309 DEADTRANS('A', '~', 0xc3 /* Ã */, 0x0000),
310 DEADTRANS('O', '~', 0xd5 /* Õ */, 0x0000),
311 DEADTRANS('N', '~', 0xd1 /* Ñ */, 0x0000),
312 DEADTRANS(' ', '~', '~', 0x0000),
313 { 0, 0, 0 }
314};
315
317 { 0x01, L"ESC" },
318 { 0x0e, L"TILBAGE" },
319 { 0x0f, L"TAB" },
320 { 0x1c, L"ENTER" },
321 { 0x1d, L"CTRL" },
322 { 0x2a, L"SKIFT" },
323 { 0x36, L"H" L"\x00d8" L"JRE SKIFT" },
324 { 0x37, L"NUM *" },
325 { 0x38, L"ALT" },
326 { 0x39, L"MELLEMRUM" },
327 { 0x3a, L"CAPS LOCK" },
328 { 0x3b, L"F1" },
329 { 0x3c, L"F2" },
330 { 0x3d, L"F3" },
331 { 0x3e, L"F4" },
332 { 0x3f, L"F5" },
333 { 0x40, L"F6" },
334 { 0x41, L"F7" },
335 { 0x42, L"F8" },
336 { 0x43, L"F9" },
337 { 0x44, L"F10" },
338 { 0x45, L"PAUSE" },
339 { 0x46, L"SCROLL LOCK" },
340 { 0x47, L"NUM 7" },
341 { 0x48, L"NUM 8" },
342 { 0x49, L"NUM 9" },
343 { 0x4a, L"NUM -" },
344 { 0x4b, L"NUM 4" },
345 { 0x4c, L"NUM 5" },
346 { 0x4d, L"NUM 6" },
347 { 0x4e, L"NUM +" },
348 { 0x4f, L"NUM 1" },
349 { 0x50, L"NUM 2" },
350 { 0x51, L"NUM 3" },
351 { 0x52, L"NUM 0" },
352 { 0x53, L"NUM ," },
353 { 0x57, L"F11" },
354 { 0x58, L"F12" },
355 { 0, NULL },
356};
357
359 { 0x1c, L"NUM ENTER" },
360 { 0x1d, L"H" L"\x00d8" L"JRE CTRL" },
361 { 0x35, L"NUM /" },
362 { 0x37, L"PRINTSCRN" },
363 { 0x38, L"ALT GR" },
364 { 0x45, L"NUM LOCK" },
365 { 0x46, L"BREAK" },
366 { 0x47, L"HOME" },
367 { 0x48, L"PIL OP" },
368 { 0x49, L"PGUP" },
369 { 0x4b, L"VENSTRE PIL" },
370 { 0x4d, L"H" L"\x00d8" L"JRE PIL" },
371 { 0x4f, L"END" },
372 { 0x50, L"PIL NED" },
373 { 0x51, L"PGDN" },
374 { 0x52, L"INS" },
375 { 0x53, L"DELETE" },
376 { 0x54, L"<00>" },
377 { 0x56, L"HELP" },
378 { 0x5b, L"Venstre Windows" },
379 { 0x5c, L"H" L"\x00f8" L"jre Windows" },
380 { 0x5d, L"Program" },
381 { 0, NULL },
382};
383
385 L"\x00b4" L"ACCENT AIGU",
386 L"`ACCENT GRAVE",
387 L"^CIRKUMFLEKS",
388 L"\x00a8" L"TREMA",
389 L"~TILDE",
390 NULL
391};
392
404 MAKELONG(KLLF_ALTGR, KBD_VERSION), /* 0x00010001 */
405 0, 0, NULL /* no ligatures */
406};
407
409 return &keyboard_layout_table;
410}
#define RTL_NUMBER_OF(x)
Definition: RtlRegistry.c:12
#define NULL
Definition: types.h:112
#define L(x)
Definition: resources.c:13
#define WCH_DEAD
Definition: kbd.h:116
#define VK_ABNT_C2
Definition: kbd.h:127
#define VK_ABNT_C1
Definition: kbd.h:126
#define CAPLOK
Definition: kbd.h:120
#define KBDALT
Definition: kbd.h:18
#define WCH_NONE
Definition: kbd.h:115
#define SHFT_INVALID
Definition: kbd.h:21
#define KBDSPECIAL
Definition: kbd.h:12
#define KBDCTRL
Definition: kbd.h:17
#define KBDNUMPAD
Definition: kbd.h:13
#define KBDEXT
Definition: kbd.h:10
#define KLLF_ALTGR
Definition: kbd.h:93
#define KBD_VERSION
Definition: kbd.h:91
WCHAR * DEADKEY_LPWSTR
Definition: kbd.h:64
#define KBDSHIFT
Definition: kbd.h:16
#define KBDMULTIVK
Definition: kbd.h:11
#define DEADTRANS(ch, accent, comp, flags)
Definition: kbdfo.c:29
ROSDATA DEADKEY deadkey_table[]
Definition: kbdfo.c:258
ROSDATA VSC_LPWSTR extended_key_names[]
Definition: kbdfo.c:358
ROSDATA USHORT scancode_to_vk[]
Definition: kbdfo.c:31
ROSDATA MODIFIERS modifier_bits
Definition: kbdfo.c:136
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[]
Definition: kbdfo.c:172
ROSDATA VSC_LPWSTR key_names[]
Definition: kbdfo.c:316
#define vk_master(n, x)
Definition: kbdfo.c:247
ROSDATA VSC_VK extcode0_to_vk[]
Definition: kbdfo.c:82
ROSDATA VK_TO_WCHARS1 key_to_chars_1mod[]
Definition: kbdfo.c:233
ROSDATA DEADKEY_LPWSTR key_names_dead[]
Definition: kbdfo.c:384
ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[]
Definition: kbdfo.c:249
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[]
Definition: kbdfo.c:154
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[]
Definition: kbdfo.c:188
#define ROSDATA
Definition: kbdfo.c:22
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[]
Definition: kbdfo.c:193
#define VK_EMPTY
Definition: kbdfo.c:26
ROSDATA VK_TO_BIT modifier_keys[]
Definition: kbdfo.c:129
ROSDATA VSC_VK extcode1_to_vk[]
Definition: kbdfo.c:124
ROSDATA KBDTABLES keyboard_layout_table
Definition: kbdfo.c:393
PKBDTABLES WINAPI KbdLayerDescriptor()
Definition: kbdjpn.c:390
unsigned short USHORT
Definition: pedump.c:61
#define VK_OEM_AUTO
Definition: winuser.h:2377
#define VK_CLEAR
Definition: winuser.h:2236
#define VK_OEM_5
Definition: winuser.h:2354
#define VK_NUMPAD3
Definition: winuser.h:2278
#define VK_SNAPSHOT
Definition: winuser.h:2267
#define VK_F12
Definition: winuser.h:2302
#define VK_TAB
Definition: winuser.h:2235
#define VK_F9
Definition: winuser.h:2299
#define VK_APPS
Definition: winuser.h:2273
#define VK_MULTIPLY
Definition: winuser.h:2285
#define VK_ZOOM
Definition: winuser.h:2385
#define VK_NUMPAD1
Definition: winuser.h:2276
#define VK_F10
Definition: winuser.h:2300
#define VK_OEM_7
Definition: winuser.h:2356
#define VK_F15
Definition: winuser.h:2305
#define VK_NUMPAD2
Definition: winuser.h:2277
#define VK_OEM_JUMP
Definition: winuser.h:2368
#define VK_SPACE
Definition: winuser.h:2255
#define VK_CAPITAL
Definition: winuser.h:2242
#define VK_OEM_4
Definition: winuser.h:2353
#define VK_NUMPAD4
Definition: winuser.h:2279
#define VK_SCROLL
Definition: winuser.h:2316
#define VK_F23
Definition: winuser.h:2313
#define VK_CONTROL
Definition: winuser.h:2239
#define VK_EREOF
Definition: winuser.h:2383
#define VK_OEM_PA1
Definition: winuser.h:2369
#define VK_F22
Definition: winuser.h:2312
#define VK_RSHIFT
Definition: winuser.h:2319
#define VK_CANCEL
Definition: winuser.h:2228
#define VK_UP
Definition: winuser.h:2261
#define VK_F18
Definition: winuser.h:2308
#define VK_F16
Definition: winuser.h:2306
#define VK_OEM_FINISH
Definition: winuser.h:2375
#define VK_LSHIFT
Definition: winuser.h:2318
#define VK_LCONTROL
Definition: winuser.h:2320
#define VK_NUMPAD0
Definition: winuser.h:2275
#define VK_F1
Definition: winuser.h:2291
#define VK_F6
Definition: winuser.h:2296
#define VK_F24
Definition: winuser.h:2314
#define VK_PAUSE
Definition: winuser.h:2241
#define VK_OEM_PA3
Definition: winuser.h:2371
#define VK_NUMPAD6
Definition: winuser.h:2281
#define VK_F21
Definition: winuser.h:2311
#define VK_NEXT
Definition: winuser.h:2257
#define VK_RCONTROL
Definition: winuser.h:2321
#define VK_F14
Definition: winuser.h:2304
#define VK_F20
Definition: winuser.h:2310
#define VK_RETURN
Definition: winuser.h:2237
#define VK_OEM_6
Definition: winuser.h:2355
#define VK_SLEEP
Definition: winuser.h:2274
#define VK_OEM_BACKTAB
Definition: winuser.h:2379
#define VK_F5
Definition: winuser.h:2295
#define VK_F11
Definition: winuser.h:2301
#define VK_F8
Definition: winuser.h:2298
#define VK_RMENU
Definition: winuser.h:2323
#define VK_NUMPAD9
Definition: winuser.h:2284
#define VK_END
Definition: winuser.h:2258
#define VK_HOME
Definition: winuser.h:2259
#define VK_ADD
Definition: winuser.h:2286
#define VK_OEM_RESET
Definition: winuser.h:2367
#define VK_OEM_2
Definition: winuser.h:2351
#define VK_BACK
Definition: winuser.h:2234
#define VK_F3
Definition: winuser.h:2293
#define VK_LWIN
Definition: winuser.h:2271
#define VK_F4
Definition: winuser.h:2294
#define VK_NUMPAD5
Definition: winuser.h:2280
#define VK_LEFT
Definition: winuser.h:2260
#define VK_F17
Definition: winuser.h:2307
#define VK_NUMPAD7
Definition: winuser.h:2282
#define VK_RIGHT
Definition: winuser.h:2262
#define VK_OEM_1
Definition: winuser.h:2344
#define VK_DOWN
Definition: winuser.h:2263
#define VK_NUMLOCK
Definition: winuser.h:2315
#define VK_SHIFT
Definition: winuser.h:2238
#define VK_PRIOR
Definition: winuser.h:2256
#define VK_F19
Definition: winuser.h:2309
#define VK_DELETE
Definition: winuser.h:2269
#define VK_OEM_WSCTRL
Definition: winuser.h:2372
#define VK_DIVIDE
Definition: winuser.h:2290
#define VK_NUMPAD8
Definition: winuser.h:2283
#define VK_F13
Definition: winuser.h:2303
#define VK_DECIMAL
Definition: winuser.h:2289
#define VK_ESCAPE
Definition: winuser.h:2250
#define VK_OEM_3
Definition: winuser.h:2352
#define VK_HELP
Definition: winuser.h:2270
#define VK_F7
Definition: winuser.h:2297
#define VK_INSERT
Definition: winuser.h:2268
#define VK_RWIN
Definition: winuser.h:2272
#define VK_SUBTRACT
Definition: winuser.h:2288
#define VK_LMENU
Definition: winuser.h:2322
#define VK_MENU
Definition: winuser.h:2240
#define VK_F2
Definition: winuser.h:2292
Definition: kbd.h:58
Definition: kbd.h:97
Definition: kbd.h:28
Definition: kbd.h:23
Definition: kbd.h:73
#define MAKELONG(a, b)
Definition: typedefs.h:249
#define WINAPI
Definition: msvc.h:6