ReactOS  0.4.15-dev-1018-g0695ecb
NtUserToUnicodeEx.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS api tests
3  * LICENSE: GPL - See COPYING in the top level directory
4  * PURPOSE: Test for NtUserToUnicodeEx
5  * PROGRAMMERS:
6  */
7 
8 #include <win32nt.h>
9 
11 {
12  BYTE KeyState[256] = {0};
13  WCHAR Buffer[10];
15 
16  TEST(NtUserToUnicodeEx(27, 1, KeyState, Buffer, 10, 0, 0) == 1);
17 
18  /* Test with no key pressed */
19  ZeroMemory(KeyState, 256);
20  TEST(NtUserToUnicodeEx(27, 1, KeyState, Buffer, 10, 0, hkl) == 1);
21  TEST(Buffer[0] == 27);
22  TEST(NtUserToUnicodeEx(49, 2, KeyState, Buffer, 10, 0, hkl) == 1);
23  TEST(Buffer[0] == '1');
24  TEST(NtUserToUnicodeEx(50, 3, KeyState, Buffer, 10, 0, hkl) == 1);
25  TEST(Buffer[0] == '2');
26  TEST(NtUserToUnicodeEx(51, 4, KeyState, Buffer, 10, 0, hkl) == 1);
27  TEST(Buffer[0] == '3');
28  TEST(NtUserToUnicodeEx(52, 5, KeyState, Buffer, 10, 0, hkl) == 1);
29  TEST(Buffer[0] == '4');
30  TEST(NtUserToUnicodeEx(53, 6, KeyState, Buffer, 10, 0, hkl) == 1);
31  TEST(Buffer[0] == '5');
32  TEST(NtUserToUnicodeEx(54, 7, KeyState, Buffer, 10, 0, hkl) == 1);
33  TEST(Buffer[0] == '6');
34  TEST(NtUserToUnicodeEx(55, 8, KeyState, Buffer, 10, 0, hkl) == 1);
35  TEST(Buffer[0] == '7');
36  TEST(NtUserToUnicodeEx(56, 9, KeyState, Buffer, 10, 0, hkl) == 1);
37  TEST(Buffer[0] == '8');
38  TEST(NtUserToUnicodeEx(57, 10, KeyState, Buffer, 10, 0, hkl) == 1);
39  TEST(Buffer[0] == '9');
40  TEST(NtUserToUnicodeEx(48, 11, KeyState, Buffer, 10, 0, hkl) == 1);
41  TEST(Buffer[0] == '0');
42  TEST(NtUserToUnicodeEx(189, 12, KeyState, Buffer, 10, 0, hkl) == 1);
43  TEST(Buffer[0] == '-');
44  TEST(NtUserToUnicodeEx(187, 13, KeyState, Buffer, 10, 0, hkl) == 1);
45  TEST(Buffer[0] == '=');
46  TEST(NtUserToUnicodeEx(8, 14, KeyState, Buffer, 10, 0, hkl) == 1);
47  TEST(Buffer[0] == 8);
48  TEST(NtUserToUnicodeEx(9, 15, KeyState, Buffer, 10, 0, hkl) == 1);
49  TEST(Buffer[0] == 9);
50  TEST(NtUserToUnicodeEx(81, 16, KeyState, Buffer, 10, 0, hkl) == 1);
51  TEST(Buffer[0] == 'q');
52  TEST(NtUserToUnicodeEx(87, 17, KeyState, Buffer, 10, 0, hkl) == 1);
53  TEST(Buffer[0] == 'w');
54  TEST(NtUserToUnicodeEx(69, 18, KeyState, Buffer, 10, 0, hkl) == 1);
55  TEST(Buffer[0] == 'e');
56  TEST(NtUserToUnicodeEx(82, 19, KeyState, Buffer, 10, 0, hkl) == 1);
57  TEST(Buffer[0] == 'r');
58  TEST(NtUserToUnicodeEx(84, 20, KeyState, Buffer, 10, 0, hkl) == 1);
59  TEST(Buffer[0] == 't');
60  TEST(NtUserToUnicodeEx(89, 21, KeyState, Buffer, 10, 0, hkl) == 1);
61  TEST(Buffer[0] == 'y');
62  TEST(NtUserToUnicodeEx(85, 22, KeyState, Buffer, 10, 0, hkl) == 1);
63  TEST(Buffer[0] == 'u');
64  TEST(NtUserToUnicodeEx(73, 23, KeyState, Buffer, 10, 0, hkl) == 1);
65  TEST(Buffer[0] == 'i');
66  TEST(NtUserToUnicodeEx(79, 24, KeyState, Buffer, 10, 0, hkl) == 1);
67  TEST(Buffer[0] == 'o');
68  TEST(NtUserToUnicodeEx(80, 25, KeyState, Buffer, 10, 0, hkl) == 1);
69  TEST(Buffer[0] == 'p');
70  TEST(NtUserToUnicodeEx(219, 26, KeyState, Buffer, 10, 0, hkl) == 1);
71  TEST(Buffer[0] == '[');
72  TEST(NtUserToUnicodeEx(221, 27, KeyState, Buffer, 10, 0, hkl) == 1);
73  TEST(Buffer[0] == ']');
74  TEST(NtUserToUnicodeEx(13, 28, KeyState, Buffer, 10, 0, hkl) == 1);
75  TEST(Buffer[0] == 13);
76  TEST(NtUserToUnicodeEx(65, 30, KeyState, Buffer, 10, 0, hkl) == 1);
77  TEST(Buffer[0] == 'a');
78  TEST(NtUserToUnicodeEx(83, 31, KeyState, Buffer, 10, 0, hkl) == 1);
79  TEST(Buffer[0] == 's');
80  TEST(NtUserToUnicodeEx(68, 32, KeyState, Buffer, 10, 0, hkl) == 1);
81  TEST(Buffer[0] == 'd');
82  TEST(NtUserToUnicodeEx(70, 33, KeyState, Buffer, 10, 0, hkl) == 1);
83  TEST(Buffer[0] == 'f');
84  TEST(NtUserToUnicodeEx(71, 34, KeyState, Buffer, 10, 0, hkl) == 1);
85  TEST(Buffer[0] == 'g');
86  TEST(NtUserToUnicodeEx(72, 35, KeyState, Buffer, 10, 0, hkl) == 1);
87  TEST(Buffer[0] == 'h');
88  TEST(NtUserToUnicodeEx(74, 36, KeyState, Buffer, 10, 0, hkl) == 1);
89  TEST(Buffer[0] == 'j');
90  TEST(NtUserToUnicodeEx(75, 37, KeyState, Buffer, 10, 0, hkl) == 1);
91  TEST(Buffer[0] == 'k');
92  TEST(NtUserToUnicodeEx(76, 38, KeyState, Buffer, 10, 0, hkl) == 1);
93  TEST(Buffer[0] == 'l');
94  TEST(NtUserToUnicodeEx(186, 39, KeyState, Buffer, 10, 0, hkl) == 1);
95  TEST(Buffer[0] == ';');
96  TEST(NtUserToUnicodeEx(222, 40, KeyState, Buffer, 10, 0, hkl) == 1);
97  TEST(Buffer[0] == '\'');
98  TEST(NtUserToUnicodeEx(192, 41, KeyState, Buffer, 10, 0, hkl) == 1);
99  TEST(Buffer[0] == '`');
100  TEST(NtUserToUnicodeEx(220, 43, KeyState, Buffer, 10, 0, hkl) == 1);
101  TEST(Buffer[0] == '\\');
102  TEST(NtUserToUnicodeEx(90, 44, KeyState, Buffer, 10, 0, hkl) == 1);
103  TEST(Buffer[0] == 'z');
104  TEST(NtUserToUnicodeEx(88, 45, KeyState, Buffer, 10, 0, hkl) == 1);
105  TEST(Buffer[0] == 'x');
106  TEST(NtUserToUnicodeEx(67, 46, KeyState, Buffer, 10, 0, hkl) == 1);
107  TEST(Buffer[0] == 'c');
108  TEST(NtUserToUnicodeEx(86, 47, KeyState, Buffer, 10, 0, hkl) == 1);
109  TEST(Buffer[0] == 'v');
110  TEST(NtUserToUnicodeEx(66, 48, KeyState, Buffer, 10, 0, hkl) == 1);
111  TEST(Buffer[0] == 'b');
112  TEST(NtUserToUnicodeEx(78, 49, KeyState, Buffer, 10, 0, hkl) == 1);
113  TEST(Buffer[0] == 'n');
114  TEST(NtUserToUnicodeEx(77, 50, KeyState, Buffer, 10, 0, hkl) == 1);
115  TEST(Buffer[0] == 'm');
116  TEST(NtUserToUnicodeEx(188, 51, KeyState, Buffer, 10, 0, hkl) == 1);
117  TEST(Buffer[0] == ',');
118  TEST(NtUserToUnicodeEx(190, 52, KeyState, Buffer, 10, 0, hkl) == 1);
119  TEST(Buffer[0] == '.');
120  TEST(NtUserToUnicodeEx(191, 53, KeyState, Buffer, 10, 0, hkl) == 1);
121  TEST(Buffer[0] == '/');
122  TEST(NtUserToUnicodeEx(106, 55, KeyState, Buffer, 10, 0, hkl) == 1);
123  TEST(Buffer[0] == '*');
124  TEST(NtUserToUnicodeEx(32, 57, KeyState, Buffer, 10, 0, hkl) == 1);
125  TEST(Buffer[0] == ' ');
126  TEST(NtUserToUnicodeEx(109, 74, KeyState, Buffer, 10, 0, hkl) == 1);
127  TEST(Buffer[0] == '-');
128  TEST(NtUserToUnicodeEx(107, 78, KeyState, Buffer, 10, 0, hkl) == 1);
129  TEST(Buffer[0] == '+');
130  TEST(NtUserToUnicodeEx(226, 86, KeyState, Buffer, 10, 0, hkl) == 1);
131  TEST(Buffer[0] == '\\');
132  TEST(NtUserToUnicodeEx(9, 124, KeyState, Buffer, 10, 0, hkl) == 1);
133  TEST(Buffer[0] == 9);
134 
135  /* Test with shift key pressed */
136  ZeroMemory(KeyState, 256);
137  KeyState[VK_SHIFT] = 0xff;
138  TEST(NtUserToUnicodeEx(27, 1, KeyState, Buffer, 10, 0, hkl) == 1);
139  TEST(Buffer[0] == 27);
140  TEST(NtUserToUnicodeEx(49, 2, KeyState, Buffer, 10, 0, hkl) == 1);
141  TEST(Buffer[0] == '!');
142  TEST(NtUserToUnicodeEx(50, 3, KeyState, Buffer, 10, 0, hkl) == 1);
143  TEST(Buffer[0] == '@');
144  TEST(NtUserToUnicodeEx(51, 4, KeyState, Buffer, 10, 0, hkl) == 1);
145  TEST(Buffer[0] == '#');
146  TEST(NtUserToUnicodeEx(52, 5, KeyState, Buffer, 10, 0, hkl) == 1);
147  TEST(Buffer[0] == '$');
148  TEST(NtUserToUnicodeEx(53, 6, KeyState, Buffer, 10, 0, hkl) == 1);
149  TEST(Buffer[0] == '%');
150  TEST(NtUserToUnicodeEx(54, 7, KeyState, Buffer, 10, 0, hkl) == 1);
151  TEST(Buffer[0] == '^');
152  TEST(NtUserToUnicodeEx(55, 8, KeyState, Buffer, 10, 0, hkl) == 1);
153  TEST(Buffer[0] == '&');
154  TEST(NtUserToUnicodeEx(56, 9, KeyState, Buffer, 10, 0, hkl) == 1);
155  TEST(Buffer[0] == '*');
156  TEST(NtUserToUnicodeEx(57, 10, KeyState, Buffer, 10, 0, hkl) == 1);
157  TEST(Buffer[0] == '(');
158  TEST(NtUserToUnicodeEx(48, 11, KeyState, Buffer, 10, 0, hkl) == 1);
159  TEST(Buffer[0] == ')');
160  TEST(NtUserToUnicodeEx(189, 12, KeyState, Buffer, 10, 0, hkl) == 1);
161  TEST(Buffer[0] == '_');
162  TEST(NtUserToUnicodeEx(187, 13, KeyState, Buffer, 10, 0, hkl) == 1);
163  TEST(Buffer[0] == '+');
164  TEST(NtUserToUnicodeEx(8, 14, KeyState, Buffer, 10, 0, hkl) == 1);
165  TEST(Buffer[0] == 8);
166  TEST(NtUserToUnicodeEx(9, 15, KeyState, Buffer, 10, 0, hkl) == 1);
167  TEST(Buffer[0] == 9);
168  TEST(NtUserToUnicodeEx(81, 16, KeyState, Buffer, 10, 0, hkl) == 1);
169  TEST(Buffer[0] == 'Q');
170  TEST(NtUserToUnicodeEx(87, 17, KeyState, Buffer, 10, 0, hkl) == 1);
171  TEST(Buffer[0] == 'W');
172  TEST(NtUserToUnicodeEx(69, 18, KeyState, Buffer, 10, 0, hkl) == 1);
173  TEST(Buffer[0] == 'E');
174  TEST(NtUserToUnicodeEx(82, 19, KeyState, Buffer, 10, 0, hkl) == 1);
175  TEST(Buffer[0] == 'R');
176  TEST(NtUserToUnicodeEx(84, 20, KeyState, Buffer, 10, 0, hkl) == 1);
177  TEST(Buffer[0] == 'T');
178  TEST(NtUserToUnicodeEx(89, 21, KeyState, Buffer, 10, 0, hkl) == 1);
179  TEST(Buffer[0] == 'Y');
180  TEST(NtUserToUnicodeEx(85, 22, KeyState, Buffer, 10, 0, hkl) == 1);
181  TEST(Buffer[0] == 'U');
182  TEST(NtUserToUnicodeEx(73, 23, KeyState, Buffer, 10, 0, hkl) == 1);
183  TEST(Buffer[0] == 'I');
184  TEST(NtUserToUnicodeEx(79, 24, KeyState, Buffer, 10, 0, hkl) == 1);
185  TEST(Buffer[0] == 'O');
186  TEST(NtUserToUnicodeEx(80, 25, KeyState, Buffer, 10, 0, hkl) == 1);
187  TEST(Buffer[0] == 'P');
188  TEST(NtUserToUnicodeEx(219, 26, KeyState, Buffer, 10, 0, hkl) == 1);
189  TEST(Buffer[0] == '{');
190  TEST(NtUserToUnicodeEx(221, 27, KeyState, Buffer, 10, 0, hkl) == 1);
191  TEST(Buffer[0] == '}');
192  TEST(NtUserToUnicodeEx(13, 28, KeyState, Buffer, 10, 0, hkl) == 1);
193  TEST(Buffer[0] == 13);
194  TEST(NtUserToUnicodeEx(65, 30, KeyState, Buffer, 10, 0, hkl) == 1);
195  TEST(Buffer[0] == 'A');
196  TEST(NtUserToUnicodeEx(83, 31, KeyState, Buffer, 10, 0, hkl) == 1);
197  TEST(Buffer[0] == 'S');
198  TEST(NtUserToUnicodeEx(68, 32, KeyState, Buffer, 10, 0, hkl) == 1);
199  TEST(Buffer[0] == 'D');
200  TEST(NtUserToUnicodeEx(70, 33, KeyState, Buffer, 10, 0, hkl) == 1);
201  TEST(Buffer[0] == 'F');
202  TEST(NtUserToUnicodeEx(71, 34, KeyState, Buffer, 10, 0, hkl) == 1);
203  TEST(Buffer[0] == 'G');
204  TEST(NtUserToUnicodeEx(72, 35, KeyState, Buffer, 10, 0, hkl) == 1);
205  TEST(Buffer[0] == 'H');
206  TEST(NtUserToUnicodeEx(74, 36, KeyState, Buffer, 10, 0, hkl) == 1);
207  TEST(Buffer[0] == 'J');
208  TEST(NtUserToUnicodeEx(75, 37, KeyState, Buffer, 10, 0, hkl) == 1);
209  TEST(Buffer[0] == 'K');
210  TEST(NtUserToUnicodeEx(76, 38, KeyState, Buffer, 10, 0, hkl) == 1);
211  TEST(Buffer[0] == 'L');
212  TEST(NtUserToUnicodeEx(186, 39, KeyState, Buffer, 10, 0, hkl) == 1);
213  TEST(Buffer[0] == ':');
214  TEST(NtUserToUnicodeEx(222, 40, KeyState, Buffer, 10, 0, hkl) == 1);
215  TEST(Buffer[0] == '"');
216  TEST(NtUserToUnicodeEx(192, 41, KeyState, Buffer, 10, 0, hkl) == 1);
217  TEST(Buffer[0] == '~');
218  TEST(NtUserToUnicodeEx(220, 43, KeyState, Buffer, 10, 0, hkl) == 1);
219  TEST(Buffer[0] == '|');
220  TEST(NtUserToUnicodeEx(90, 44, KeyState, Buffer, 10, 0, hkl) == 1);
221  TEST(Buffer[0] == 'Z');
222  TEST(NtUserToUnicodeEx(88, 45, KeyState, Buffer, 10, 0, hkl) == 1);
223  TEST(Buffer[0] == 'X');
224  TEST(NtUserToUnicodeEx(67, 46, KeyState, Buffer, 10, 0, hkl) == 1);
225  TEST(Buffer[0] == 'C');
226  TEST(NtUserToUnicodeEx(86, 47, KeyState, Buffer, 10, 0, hkl) == 1);
227  TEST(Buffer[0] == 'V');
228  TEST(NtUserToUnicodeEx(66, 48, KeyState, Buffer, 10, 0, hkl) == 1);
229  TEST(Buffer[0] == 'B');
230  TEST(NtUserToUnicodeEx(78, 49, KeyState, Buffer, 10, 0, hkl) == 1);
231  TEST(Buffer[0] == 'N');
232  TEST(NtUserToUnicodeEx(77, 50, KeyState, Buffer, 10, 0, hkl) == 1);
233  TEST(Buffer[0] == 'M');
234  TEST(NtUserToUnicodeEx(188, 51, KeyState, Buffer, 10, 0, hkl) == 1);
235  TEST(Buffer[0] == '<');
236  TEST(NtUserToUnicodeEx(190, 52, KeyState, Buffer, 10, 0, hkl) == 1);
237  TEST(Buffer[0] == '>');
238  TEST(NtUserToUnicodeEx(191, 53, KeyState, Buffer, 10, 0, hkl) == 1);
239  TEST(Buffer[0] == '?');
240  TEST(NtUserToUnicodeEx(106, 55, KeyState, Buffer, 10, 0, hkl) == 1);
241  TEST(Buffer[0] == '*');
242  TEST(NtUserToUnicodeEx(32, 57, KeyState, Buffer, 10, 0, hkl) == 1);
243  TEST(Buffer[0] == ' ');
244  TEST(NtUserToUnicodeEx(109, 74, KeyState, Buffer, 10, 0, hkl) == 1);
245  TEST(Buffer[0] == '-');
246  TEST(NtUserToUnicodeEx(107, 78, KeyState, Buffer, 10, 0, hkl) == 1);
247  TEST(Buffer[0] == '+');
248  TEST(NtUserToUnicodeEx(226, 86, KeyState, Buffer, 10, 0, hkl) == 1);
249  TEST(Buffer[0] == '|');
250  TEST(NtUserToUnicodeEx(9, 124, KeyState, Buffer, 10, 0, hkl) == 1);
251  TEST(Buffer[0] == 9);
252 
253  /* Test with ctrl key pressed */
254  ZeroMemory(KeyState, 256);
255  KeyState[VK_CONTROL] = 0xff;
256 // TEST(NtUserToUnicodeEx(27, 1, KeyState, Buffer, 10, 0, hkl) == 1);
257 // TEST(Buffer[0] == 27);
258 // TEST(NtUserToUnicodeEx(8, 14, KeyState, Buffer, 10, 0, hkl) == 1);
259 // TEST(Buffer[0] == 127);
260  TEST(NtUserToUnicodeEx(81, 16, KeyState, Buffer, 10, 0, hkl) == 1);
261  TEST(Buffer[0] == 17);
262  TEST(NtUserToUnicodeEx(87, 17, KeyState, Buffer, 10, 0, hkl) == 1);
263  TEST(Buffer[0] == 23);
264  TEST(NtUserToUnicodeEx(69, 18, KeyState, Buffer, 10, 0, hkl) == 1);
265  TEST(Buffer[0] == 5);
266  TEST(NtUserToUnicodeEx(82, 19, KeyState, Buffer, 10, 0, hkl) == 1);
267  TEST(Buffer[0] == 18);
268  TEST(NtUserToUnicodeEx(84, 20, KeyState, Buffer, 10, 0, hkl) == 1);
269  TEST(Buffer[0] == 20);
270  TEST(NtUserToUnicodeEx(89, 21, KeyState, Buffer, 10, 0, hkl) == 1);
271  TEST(Buffer[0] == 25);
272  TEST(NtUserToUnicodeEx(85, 22, KeyState, Buffer, 10, 0, hkl) == 1);
273  TEST(Buffer[0] == 21);
274  TEST(NtUserToUnicodeEx(73, 23, KeyState, Buffer, 10, 0, hkl) == 1);
275  TEST(Buffer[0] == 9);
276  TEST(NtUserToUnicodeEx(79, 24, KeyState, Buffer, 10, 0, hkl) == 1);
277  TEST(Buffer[0] == 15);
278  TEST(NtUserToUnicodeEx(80, 25, KeyState, Buffer, 10, 0, hkl) == 1);
279  TEST(Buffer[0] == 16);
280  TEST(NtUserToUnicodeEx(219, 26, KeyState, Buffer, 10, 0, hkl) == 1);
281  TEST(Buffer[0] == 27);
282  TEST(NtUserToUnicodeEx(221, 27, KeyState, Buffer, 10, 0, hkl) == 1);
283  TEST(Buffer[0] == 29);
284  TEST(NtUserToUnicodeEx(13, 28, KeyState, Buffer, 10, 0, hkl) == 1);
285  TEST(Buffer[0] == 10);
286  TEST(NtUserToUnicodeEx(65, 30, KeyState, Buffer, 10, 0, hkl) == 1);
287  TEST(Buffer[0] == 1);
288  TEST(NtUserToUnicodeEx(83, 31, KeyState, Buffer, 10, 0, hkl) == 1);
289  TEST(Buffer[0] == 19);
290  TEST(NtUserToUnicodeEx(68, 32, KeyState, Buffer, 10, 0, hkl) == 1);
291  TEST(Buffer[0] == 4);
292  TEST(NtUserToUnicodeEx(70, 33, KeyState, Buffer, 10, 0, hkl) == 1);
293  TEST(Buffer[0] == 6);
294  TEST(NtUserToUnicodeEx(71, 34, KeyState, Buffer, 10, 0, hkl) == 1);
295  TEST(Buffer[0] == 7);
296  TEST(NtUserToUnicodeEx(72, 35, KeyState, Buffer, 10, 0, hkl) == 1);
297  TEST(Buffer[0] == 8);
298  TEST(NtUserToUnicodeEx(74, 36, KeyState, Buffer, 10, 0, hkl) == 1);
299  TEST(Buffer[0] == 10);
300  TEST(NtUserToUnicodeEx(75, 37, KeyState, Buffer, 10, 0, hkl) == 1);
301  TEST(Buffer[0] == 11);
302  TEST(NtUserToUnicodeEx(76, 38, KeyState, Buffer, 10, 0, hkl) == 1);
303  TEST(Buffer[0] == 12);
304  TEST(NtUserToUnicodeEx(220, 43, KeyState, Buffer, 10, 0, hkl) == 1);
305  TEST(Buffer[0] == 28);
306  TEST(NtUserToUnicodeEx(90, 44, KeyState, Buffer, 10, 0, hkl) == 1);
307  TEST(Buffer[0] == 26);
308  TEST(NtUserToUnicodeEx(88, 45, KeyState, Buffer, 10, 0, hkl) == 1);
309  TEST(Buffer[0] == 24);
310  TEST(NtUserToUnicodeEx(67, 46, KeyState, Buffer, 10, 0, hkl) == 1);
311  TEST(Buffer[0] == 3);
312  TEST(NtUserToUnicodeEx(86, 47, KeyState, Buffer, 10, 0, hkl) == 1);
313  TEST(Buffer[0] == 22);
314  TEST(NtUserToUnicodeEx(66, 48, KeyState, Buffer, 10, 0, hkl) == 1);
315  TEST(Buffer[0] == 2);
316  TEST(NtUserToUnicodeEx(78, 49, KeyState, Buffer, 10, 0, hkl) == 1);
317  TEST(Buffer[0] == 14);
318  TEST(NtUserToUnicodeEx(77, 50, KeyState, Buffer, 10, 0, hkl) == 1);
319  TEST(Buffer[0] == 13);
320 // TEST(NtUserToUnicodeEx(32, 57, KeyState, Buffer, 10, 0, hkl) == 1);
321 // TEST(Buffer[0] == 32);
322  TEST(NtUserToUnicodeEx(226, 86, KeyState, Buffer, 10, 0, hkl) == 1);
323  TEST(Buffer[0] == 28);
324 
325  /* Test with VK_CAPITAL key pressed */
326  ZeroMemory(KeyState, 256);
327  KeyState[VK_CAPITAL] = 0xff;
328  TEST(NtUserToUnicodeEx(27, 1, KeyState, Buffer, 10, 0, hkl) == 1);
329  TEST(Buffer[0] == 27);
330  TEST(NtUserToUnicodeEx(49, 2, KeyState, Buffer, 10, 0, hkl) == 1);
331  TEST(Buffer[0] == '1');
332  TEST(NtUserToUnicodeEx(50, 3, KeyState, Buffer, 10, 0, hkl) == 1);
333  TEST(Buffer[0] == '2');
334  TEST(NtUserToUnicodeEx(51, 4, KeyState, Buffer, 10, 0, hkl) == 1);
335  TEST(Buffer[0] == '3');
336  TEST(NtUserToUnicodeEx(52, 5, KeyState, Buffer, 10, 0, hkl) == 1);
337  TEST(Buffer[0] == '4');
338  TEST(NtUserToUnicodeEx(53, 6, KeyState, Buffer, 10, 0, hkl) == 1);
339  TEST(Buffer[0] == '5');
340  TEST(NtUserToUnicodeEx(54, 7, KeyState, Buffer, 10, 0, hkl) == 1);
341  TEST(Buffer[0] == '6');
342  TEST(NtUserToUnicodeEx(55, 8, KeyState, Buffer, 10, 0, hkl) == 1);
343  TEST(Buffer[0] == '7');
344  TEST(NtUserToUnicodeEx(56, 9, KeyState, Buffer, 10, 0, hkl) == 1);
345  TEST(Buffer[0] == '8');
346  TEST(NtUserToUnicodeEx(57, 10, KeyState, Buffer, 10, 0, hkl) == 1);
347  TEST(Buffer[0] == '9');
348  TEST(NtUserToUnicodeEx(48, 11, KeyState, Buffer, 10, 0, hkl) == 1);
349  TEST(Buffer[0] == '0');
350  TEST(NtUserToUnicodeEx(189, 12, KeyState, Buffer, 10, 0, hkl) == 1);
351  TEST(Buffer[0] == '-');
352  TEST(NtUserToUnicodeEx(187, 13, KeyState, Buffer, 10, 0, hkl) == 1);
353  TEST(Buffer[0] == '=');
354  TEST(NtUserToUnicodeEx(8, 14, KeyState, Buffer, 10, 0, hkl) == 1);
355  TEST(Buffer[0] == 8);
356  TEST(NtUserToUnicodeEx(9, 15, KeyState, Buffer, 10, 0, hkl) == 1);
357  TEST(Buffer[0] == 9);
358  TEST(NtUserToUnicodeEx(81, 16, KeyState, Buffer, 10, 0, hkl) == 1);
359  TEST(Buffer[0] == 'Q');
360  TEST(NtUserToUnicodeEx(87, 17, KeyState, Buffer, 10, 0, hkl) == 1);
361  TEST(Buffer[0] == 'W');
362  TEST(NtUserToUnicodeEx(69, 18, KeyState, Buffer, 10, 0, hkl) == 1);
363  TEST(Buffer[0] == 'E');
364  TEST(NtUserToUnicodeEx(82, 19, KeyState, Buffer, 10, 0, hkl) == 1);
365  TEST(Buffer[0] == 'R');
366  TEST(NtUserToUnicodeEx(84, 20, KeyState, Buffer, 10, 0, hkl) == 1);
367  TEST(Buffer[0] == 'T');
368  TEST(NtUserToUnicodeEx(89, 21, KeyState, Buffer, 10, 0, hkl) == 1);
369  TEST(Buffer[0] == 'Y');
370  TEST(NtUserToUnicodeEx(85, 22, KeyState, Buffer, 10, 0, hkl) == 1);
371  TEST(Buffer[0] == 'U');
372  TEST(NtUserToUnicodeEx(73, 23, KeyState, Buffer, 10, 0, hkl) == 1);
373  TEST(Buffer[0] == 'I');
374  TEST(NtUserToUnicodeEx(79, 24, KeyState, Buffer, 10, 0, hkl) == 1);
375  TEST(Buffer[0] == 'O');
376  TEST(NtUserToUnicodeEx(80, 25, KeyState, Buffer, 10, 0, hkl) == 1);
377  TEST(Buffer[0] == 'P');
378  TEST(NtUserToUnicodeEx(219, 26, KeyState, Buffer, 10, 0, hkl) == 1);
379  TEST(Buffer[0] == '[');
380  TEST(NtUserToUnicodeEx(221, 27, KeyState, Buffer, 10, 0, hkl) == 1);
381  TEST(Buffer[0] == ']');
382  TEST(NtUserToUnicodeEx(13, 28, KeyState, Buffer, 10, 0, hkl) == 1);
383  TEST(Buffer[0] == 13);
384  TEST(NtUserToUnicodeEx(65, 30, KeyState, Buffer, 10, 0, hkl) == 1);
385  TEST(Buffer[0] == 'A');
386  TEST(NtUserToUnicodeEx(83, 31, KeyState, Buffer, 10, 0, hkl) == 1);
387  TEST(Buffer[0] == 'S');
388  TEST(NtUserToUnicodeEx(68, 32, KeyState, Buffer, 10, 0, hkl) == 1);
389  TEST(Buffer[0] == 'D');
390  TEST(NtUserToUnicodeEx(70, 33, KeyState, Buffer, 10, 0, hkl) == 1);
391  TEST(Buffer[0] == 'F');
392  TEST(NtUserToUnicodeEx(71, 34, KeyState, Buffer, 10, 0, hkl) == 1);
393  TEST(Buffer[0] == 'G');
394  TEST(NtUserToUnicodeEx(72, 35, KeyState, Buffer, 10, 0, hkl) == 1);
395  TEST(Buffer[0] == 'H');
396  TEST(NtUserToUnicodeEx(74, 36, KeyState, Buffer, 10, 0, hkl) == 1);
397  TEST(Buffer[0] == 'J');
398  TEST(NtUserToUnicodeEx(75, 37, KeyState, Buffer, 10, 0, hkl) == 1);
399  TEST(Buffer[0] == 'K');
400  TEST(NtUserToUnicodeEx(76, 38, KeyState, Buffer, 10, 0, hkl) == 1);
401  TEST(Buffer[0] == 'L');
402  TEST(NtUserToUnicodeEx(186, 39, KeyState, Buffer, 10, 0, hkl) == 1);
403  TEST(Buffer[0] == ';');
404  TEST(NtUserToUnicodeEx(222, 40, KeyState, Buffer, 10, 0, hkl) == 1);
405  TEST(Buffer[0] == '\'');
406  TEST(NtUserToUnicodeEx(192, 41, KeyState, Buffer, 10, 0, hkl) == 1);
407  TEST(Buffer[0] == '`');
408  TEST(NtUserToUnicodeEx(220, 43, KeyState, Buffer, 10, 0, hkl) == 1);
409  TEST(Buffer[0] == '\\');
410  TEST(NtUserToUnicodeEx(90, 44, KeyState, Buffer, 10, 0, hkl) == 1);
411  TEST(Buffer[0] == 'Z');
412  TEST(NtUserToUnicodeEx(88, 45, KeyState, Buffer, 10, 0, hkl) == 1);
413  TEST(Buffer[0] == 'X');
414  TEST(NtUserToUnicodeEx(67, 46, KeyState, Buffer, 10, 0, hkl) == 1);
415  TEST(Buffer[0] == 'C');
416  TEST(NtUserToUnicodeEx(86, 47, KeyState, Buffer, 10, 0, hkl) == 1);
417  TEST(Buffer[0] == 'V');
418  TEST(NtUserToUnicodeEx(66, 48, KeyState, Buffer, 10, 0, hkl) == 1);
419  TEST(Buffer[0] == 'B');
420  TEST(NtUserToUnicodeEx(78, 49, KeyState, Buffer, 10, 0, hkl) == 1);
421  TEST(Buffer[0] == 'N');
422  TEST(NtUserToUnicodeEx(77, 50, KeyState, Buffer, 10, 0, hkl) == 1);
423  TEST(Buffer[0] == 'M');
424  TEST(NtUserToUnicodeEx(188, 51, KeyState, Buffer, 10, 0, hkl) == 1);
425  TEST(Buffer[0] == ',');
426  TEST(NtUserToUnicodeEx(190, 52, KeyState, Buffer, 10, 0, hkl) == 1);
427  TEST(Buffer[0] == '.');
428  TEST(NtUserToUnicodeEx(191, 53, KeyState, Buffer, 10, 0, hkl) == 1);
429  TEST(Buffer[0] == '/');
430  TEST(NtUserToUnicodeEx(106, 55, KeyState, Buffer, 10, 0, hkl) == 1);
431  TEST(Buffer[0] == '*');
432  TEST(NtUserToUnicodeEx(32, 57, KeyState, Buffer, 10, 0, hkl) == 1);
433  TEST(Buffer[0] == ' ');
434  TEST(NtUserToUnicodeEx(109, 74, KeyState, Buffer, 10, 0, hkl) == 1);
435  TEST(Buffer[0] == '-');
436  TEST(NtUserToUnicodeEx(107, 78, KeyState, Buffer, 10, 0, hkl) == 1);
437  TEST(Buffer[0] == '+');
438  TEST(NtUserToUnicodeEx(226, 86, KeyState, Buffer, 10, 0, hkl) == 1);
439  TEST(Buffer[0] == '\\');
440  TEST(NtUserToUnicodeEx(9, 124, KeyState, Buffer, 10, 0, hkl) == 1);
441  TEST(Buffer[0] == 9);
442 }
443 
#define KLF_NOTELLSHELL
Definition: winuser.h:116
#define ZeroMemory
Definition: winbase.h:1648
#define VK_SHIFT
Definition: winuser.h:2177
Definition: bufpool.h:45
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define TEST(x)
Definition: precomp.h:20
static const WCHAR L[]
Definition: oid.c:1250
UINT_PTR HKL
Definition: msctf.idl:101
unsigned char BYTE
Definition: xxhash.c:193
HKL hkl
Definition: msctf.idl:611
HKL WINAPI LoadKeyboardLayoutW(_In_ LPCWSTR, _In_ UINT)
#define VK_CAPITAL
Definition: winuser.h:2181
START_TEST(NtUserToUnicodeEx)
#define VK_CONTROL
Definition: winuser.h:2178
INT NTAPI NtUserToUnicodeEx(UINT wVirtKey, UINT wScanCode, PBYTE lpKeyState, LPWSTR pwszBuff, int cchBuff, UINT wFlags, HKL dwhkl)