FreeRDP
keyboard.h
1 
20 #ifndef FREERDP_LOCALE_KEYBOARD_H
21 #define FREERDP_LOCALE_KEYBOARD_H
22 
23 #include <winpr/input.h>
24 
25 #include <freerdp/api.h>
26 #include <freerdp/types.h>
27 #include <freerdp/scancode.h>
28 
29 #ifdef __cplusplus
30 extern "C"
31 {
32 #endif
33 
34  typedef struct rdp_remap_table FREERDP_REMAP_TABLE;
35 
36  typedef enum
37  {
38  RDP_KEYBOARD_LAYOUT_TYPE_STANDARD = 1,
39  RDP_KEYBOARD_LAYOUT_TYPE_VARIANT = 2,
40  RDP_KEYBOARD_LAYOUT_TYPE_IME = 4
41  } FREERDP_KEYBOARD_LAYOUT_TYPES;
42 
43  typedef struct
44  {
45  UINT16 id;
46  UINT8 primaryId;
47  UINT8 subId;
48  char locale[512];
49  char primaryLanguage[512];
50  char primaryLanguageSymbol[512];
51  char subLanguage[512];
52  char subLanguageSymbol[512];
53  } RDP_CODEPAGE;
54 
55 typedef struct
56 {
57  DWORD code; /* Keyboard layout code */
58  char* name; /* Keyboard layout name */
60 
61 /* Keyboard layout IDs */
62 typedef enum
63 {
64  KBD_ARABIC_101 = 0x00000401,
65  KBD_BULGARIAN = 0x00000402,
66  KBD_CHINESE_TRADITIONAL_US = 0x00000404,
67  KBD_CZECH = 0x00000405,
68  KBD_DANISH = 0x00000406,
69  KBD_GERMAN = 0x00000407,
70  KBD_GREEK = 0x00000408,
71  KBD_US = 0x00000409,
72  KBD_SPANISH = 0x0000040A,
73  KBD_FINNISH = 0x0000040B,
74  KBD_FRENCH = 0x0000040C,
75  KBD_HEBREW = 0x0000040D,
76  KBD_HUNGARIAN = 0x0000040E,
77  KBD_ICELANDIC = 0x0000040F,
78  KBD_ITALIAN = 0x00000410,
79  KBD_JAPANESE = 0x00000411,
80  KBD_KOREAN = 0x00000412,
81  KBD_DUTCH = 0x00000413,
82  KBD_NORWEGIAN = 0x00000414,
83  KBD_POLISH_PROGRAMMERS = 0x00000415,
84  KBD_PORTUGUESE_BRAZILIAN_ABNT = 0x00000416,
85  KBD_ROMANIAN = 0x00000418,
86  KBD_RUSSIAN = 0x00000419,
87  KBD_CROATIAN = 0x0000041A,
88  KBD_SLOVAK = 0x0000041B,
89  KBD_ALBANIAN = 0x0000041C,
90  KBD_SWEDISH = 0x0000041D,
91  KBD_THAI_KEDMANEE = 0x0000041E,
92  KBD_TURKISH_Q = 0x0000041F,
93  KBD_URDU = 0x00000420,
94  KBD_UKRAINIAN = 0x00000422,
95  KBD_BELARUSIAN = 0x00000423,
96  KBD_SLOVENIAN = 0x00000424,
97  KBD_ESTONIAN = 0x00000425,
98  KBD_LATVIAN = 0x00000426,
99  KBD_LITHUANIAN_IBM = 0x00000427,
100  KBD_FARSI = 0x00000429,
101  KBD_VIETNAMESE = 0x0000042A,
102  KBD_ARMENIAN_EASTERN = 0x0000042B,
103  KBD_AZERI_LATIN = 0x0000042C,
104  KBD_FYRO_MACEDONIAN = 0x0000042F,
105  KBD_GEORGIAN = 0x00000437,
106  KBD_FAEROESE = 0x00000438,
107  KBD_DEVANAGARI_INSCRIPT = 0x00000439,
108  KBD_MALTESE_47_KEY = 0x0000043A,
109  KBD_NORWEGIAN_WITH_SAMI = 0x0000043B,
110  KBD_KAZAKH = 0x0000043F,
111  KBD_KYRGYZ_CYRILLIC = 0x00000440,
112  KBD_TATAR = 0x00000444,
113  KBD_BENGALI = 0x00000445,
114  KBD_PUNJABI = 0x00000446,
115  KBD_GUJARATI = 0x00000447,
116  KBD_TAMIL = 0x00000449,
117  KBD_TELUGU = 0x0000044A,
118  KBD_KANNADA = 0x0000044B,
119  KBD_MALAYALAM = 0x0000044C,
120  KBD_MARATHI = 0x0000044E,
121  KBD_MONGOLIAN_CYRILLIC = 0x00000450,
122  KBD_UNITED_KINGDOM_EXTENDED = 0x00000452,
123  KBD_SYRIAC = 0x0000045A,
124  KBD_NEPALI = 0x00000461,
125  KBD_PASHTO = 0x00000463,
126  KBD_DIVEHI_PHONETIC = 0x00000465,
127  KBD_LUXEMBOURGISH = 0x0000046E,
128  KBD_MAORI = 0x00000481,
129  KBD_CHINESE_SIMPLIFIED_US = 0x00000804,
130  KBD_SWISS_GERMAN = 0x00000807,
131  KBD_UNITED_KINGDOM = 0x00000809,
132  KBD_LATIN_AMERICAN = 0x0000080A,
133  KBD_BELGIAN_FRENCH = 0x0000080C,
134  KBD_BELGIAN_PERIOD = 0x00000813,
135  KBD_PORTUGUESE = 0x00000816,
136  KBD_SERBIAN_LATIN = 0x0000081A,
137  KBD_AZERI_CYRILLIC = 0x0000082C,
138  KBD_SWEDISH_WITH_SAMI = 0x0000083B,
139  KBD_UZBEK_CYRILLIC = 0x00000843,
140  KBD_INUKTITUT_LATIN = 0x0000085D,
141  KBD_CANADIAN_FRENCH_LEGACY = 0x00000C0C,
142  KBD_SERBIAN_CYRILLIC = 0x00000C1A,
143  KBD_CANADIAN_FRENCH = 0x00001009,
144  KBD_SWISS_FRENCH = 0x0000100C,
145  KBD_BOSNIAN = 0x0000141A,
146  KBD_IRISH = 0x00001809,
147  KBD_BOSNIAN_CYRILLIC = 0x0000201A
148 } FREERDP_KBD_LAYOUT_ID;
149 
150 /* Keyboard layout variant IDs */
151 typedef enum
152 {
153  KBD_ARABIC_102 = 0x00010401,
154  KBD_BULGARIAN_LATIN = 0x00010402,
155  KBD_CZECH_QWERTY = 0x00010405,
156  KBD_GERMAN_IBM = 0x00010407,
157  KBD_GREEK_220 = 0x00010408,
158  KBD_UNITED_STATES_DVORAK = 0x00010409,
159  KBD_SPANISH_VARIATION = 0x0001040A,
160  KBD_HUNGARIAN_101_KEY = 0x0001040E,
161  KBD_ITALIAN_142 = 0x00010410,
162  KBD_POLISH_214 = 0x00010415,
163  KBD_PORTUGUESE_BRAZILIAN_ABNT2 = 0x00010416,
164  KBD_ROMANIAN_STANDARD = 0x00010418,
165  KBD_RUSSIAN_TYPEWRITER = 0x00010419,
166  KBD_SLOVAK_QWERTY = 0x0001041B,
167  KBD_THAI_PATTACHOTE = 0x0001041E,
168  KBD_TURKISH_F = 0x0001041F,
169  KBD_LATVIAN_QWERTY = 0x00010426,
170  KBD_LITHUANIAN = 0x00010427,
171  KBD_ARMENIAN_WESTERN = 0x0001042B,
172  KBD_GEORGIAN_QUERTY = 0x00010437,
173  KBD_HINDI_TRADITIONAL = 0x00010439,
174  KBD_MALTESE_48_KEY = 0x0001043A,
175  KBD_SAMI_EXTENDED_NORWAY = 0x0001043B,
176  KBD_BENGALI_INSCRIPT = 0x00010445,
177  KBD_KHMER = 0x00010453,
178  KBD_SYRIAC_PHONETIC = 0x0001045A,
179  KBD_DIVEHI_TYPEWRITER = 0x00010465,
180  KBD_BELGIAN_COMMA = 0x0001080C,
181  KBD_FINNISH_WITH_SAMI = 0x0001083B,
182  KBD_CANADIAN_MULTILINGUAL_STANDARD = 0x00011009,
183  KBD_GAELIC = 0x00011809,
184  KBD_ARABIC_102_AZERTY = 0x00020401,
185  KBD_CZECH_PROGRAMMERS = 0x00020405,
186  KBD_GREEK_319 = 0x00020408,
187  KBD_UNITED_STATES_INTERNATIONAL = 0x00020409,
188  KBD_HEBREW_STANDARD = 0x0002040D,
189  KBD_RUSSIAN_PHONETIC = 0x00020419,
190  KBD_THAI_KEDMANEE_NON_SHIFTLOCK = 0x0002041E,
191  KBD_BANGLA = 0x00020445,
192  KBD_SAMI_EXTENDED_FINLAND_SWEDEN = 0x0002083B,
193  KBD_GREEK_220_LATIN = 0x00030408,
194  KBD_UNITED_STATES_DVORAK_FOR_LEFT_HAND = 0x00030409,
195  KBD_THAI_PATTACHOTE_NON_SHIFTLOCK = 0x0003041E,
196  KBD_BULGARIAN_PHONETIC = 0x00040402,
197  KBD_GREEK_319_LATIN = 0x00040408,
198  KBD_UNITED_STATES_DVORAK_FOR_RIGHT_HAND = 0x00040409,
199  KBD_UNITED_STATES_DVORAK_PROGRAMMER = 0x19360409,
200  KBD_GREEK_LATIN = 0x00050408,
201  KBD_PERSIAN = 0x00050429,
202  KBD_US_ENGLISH_TABLE_FOR_IBM_ARABIC_238_L = 0x00050409,
203  KBD_GREEK_POLYTONIC = 0x00060408,
204  KBD_FRENCH_BEPO = 0xa000040c,
205  KBD_GERMAN_NEO = 0xB0000407
206 } FREERDP_KBD_LAYPUT_VARIANT_ID;
207 
208 /* Global Input Method Editor (IME) IDs */
209 typedef enum
210 {
211  KBD_CHINESE_TRADITIONAL_PHONETIC = 0xE0010404,
212  KBD_JAPANESE_INPUT_SYSTEM_MS_IME2002 = 0xE0010411,
213  KBD_KOREAN_INPUT_SYSTEM_IME_2000 = 0xE0010412,
214  KBD_CHINESE_SIMPLIFIED_QUANPIN = 0xE0010804,
215  KBD_CHINESE_TRADITIONAL_CHANGJIE = 0xE0020404,
216  KBD_CHINESE_SIMPLIFIED_SHUANGPIN = 0xE0020804,
217  KBD_CHINESE_TRADITIONAL_QUICK = 0xE0030404,
218  KBD_CHINESE_SIMPLIFIED_ZHENGMA = 0xE0030804,
219  KBD_CHINESE_TRADITIONAL_BIG5_CODE = 0xE0040404,
220  KBD_CHINESE_TRADITIONAL_ARRAY = 0xE0050404,
221  KBD_CHINESE_SIMPLIFIED_NEIMA = 0xE0050804,
222  KBD_CHINESE_TRADITIONAL_DAYI = 0xE0060404,
223  KBD_CHINESE_TRADITIONAL_UNICODE = 0xE0070404,
224  KBD_CHINESE_TRADITIONAL_NEW_PHONETIC = 0xE0080404,
225  KBD_CHINESE_TRADITIONAL_NEW_CHANGJIE = 0xE0090404,
226  KBD_CHINESE_TRADITIONAL_MICROSOFT_PINYIN_IME_3 = 0xE00E0804,
227  KBD_CHINESE_TRADITIONAL_ALPHANUMERIC = 0xE00F0404
228 } FREERDP_KBD_IME_ID;
229 
236 FREERDP_API void freerdp_keyboard_layouts_free(RDP_KEYBOARD_LAYOUT* layouts, size_t count);
237 
245 WINPR_ATTR_MALLOC(freerdp_keyboard_layouts_free, 1)
246 FREERDP_API RDP_KEYBOARD_LAYOUT* freerdp_keyboard_get_layouts(DWORD types, size_t* count);
247 
255 FREERDP_API const char* freerdp_keyboard_get_layout_name_from_id(DWORD keyboardLayoutId);
256 
263 FREERDP_API DWORD freerdp_keyboard_get_layout_id_from_name(const char* name);
264 
265 WINPR_DEPRECATED_VAR("since 3.11.0, implement yourself in client",
266  FREERDP_API DWORD freerdp_keyboard_init(DWORD keyboardLayoutId));
267 
268 WINPR_DEPRECATED_VAR("since 3.11.0, implement yourself in client",
269  FREERDP_API DWORD freerdp_keyboard_init_ex(DWORD keyboardLayoutId,
270  const char* keyboardRemappingList));
271 
272 WINPR_DEPRECATED_VAR("since 3.11.0, implement yourself in client",
273  FREERDP_API DWORD
274  freerdp_keyboard_get_rdp_scancode_from_x11_keycode(DWORD keycode));
275 
276 WINPR_DEPRECATED_VAR("since 3.11.0, implement yourself in client",
277  FREERDP_API DWORD freerdp_keyboard_get_x11_keycode_from_rdp_scancode(
278  DWORD scancode, BOOL extended));
279 
286 FREERDP_API void freerdp_keyboard_remap_free(FREERDP_REMAP_TABLE* table);
287 
298 WINPR_ATTR_MALLOC(freerdp_keyboard_remap_free, 1)
299 FREERDP_API FREERDP_REMAP_TABLE* freerdp_keyboard_remap_string_to_list(const char* list);
300 
311 FREERDP_API DWORD freerdp_keyboard_remap_key(const FREERDP_REMAP_TABLE* remap_table,
312  DWORD rdpScanCode);
313 
319 FREERDP_API void freerdp_codepages_free(RDP_CODEPAGE* codepages);
320 
336 WINPR_ATTR_MALLOC(freerdp_codepages_free, 1)
337 FREERDP_API RDP_CODEPAGE* freerdp_keyboard_get_matching_codepages(DWORD column, const char* filter,
338  size_t* count);
339 
346 FREERDP_API const char* freerdp_keyboard_scancode_name(DWORD scancode);
347 
348 #ifdef __cplusplus
349 }
350 #endif
351 
352 #endif /* FREERDP_LOCALE_KEYBOARD_H */