ReactOS 0.4.16-dev-38-g96c65e9
input.c
Go to the documentation of this file.
1/*
2 * ReactOS kernel
3 * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19/*
20 * PROJECT: ReactOS user32.dll
21 * FILE: win32ss/user/user32/windows/input.c
22 * PURPOSE: Input
23 * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
24 * UPDATE HISTORY:
25 * 09-05-2001 CSH Created
26 */
27
28#include <user32.h>
29
30#include <strsafe.h>
31
33
34typedef struct tagIMEHOTKEYENTRY
35{
41
42// Japanese
44{
46};
47
48// Chinese Traditional
50{
53};
54
55// Chinese Simplified
57{
60};
61
62// The far-east flags
63#define FE_JAPANESE (1 << 0)
64#define FE_CHINESE_TRADITIONAL (1 << 1)
65#define FE_CHINESE_SIMPLIFIED (1 << 2)
66#define FE_KOREAN (1 << 3)
67
68// Sets the far-east flags
69// Win: SetFeKeyboardFlags
71{
72 switch (LangID)
73 {
75 *pbFlags |= FE_JAPANESE;
76 break;
77
80 *pbFlags |= FE_CHINESE_TRADITIONAL;
81 break;
82
85 *pbFlags |= FE_CHINESE_SIMPLIFIED;
86 break;
87
89 *pbFlags |= FE_KOREAN;
90 break;
91
92 default:
93 break;
94 }
95}
96
98{
99 DWORD dwValue, cbValue;
100 LONG error;
101
102 cbValue = sizeof(dwValue);
103 error = RegQueryValueExW(hKey, pszName, NULL, NULL, (LPBYTE)&dwValue, &cbValue);
104 if (error != ERROR_SUCCESS || cbValue < sizeof(DWORD))
105 return 0;
106
107 return dwValue;
108}
109
111CliImmSetHotKeyWorker(DWORD dwHotKeyId, UINT uModifiers, UINT uVirtualKey, HKL hKL, DWORD dwAction)
112{
113 if (dwAction == SETIMEHOTKEY_ADD)
114 {
115 if (IME_HOTKEY_DSWITCH_FIRST <= dwHotKeyId && dwHotKeyId <= IME_HOTKEY_DSWITCH_LAST)
116 {
117 if (!hKL)
118 goto Failure;
119 }
120 else
121 {
122 if (hKL)
123 goto Failure;
124
125 if (IME_KHOTKEY_SHAPE_TOGGLE <= dwHotKeyId &&
127 {
128 // The Korean cannot set the IME hotkeys
129 goto Failure;
130 }
131 }
132
133#define MOD_ALL_MODS (MOD_ALT | MOD_CONTROL | MOD_SHIFT | MOD_WIN)
134 if ((uModifiers & MOD_ALL_MODS) && !(uModifiers & (MOD_LEFT | MOD_RIGHT)))
135 goto Failure;
136#undef MOD_ALL_MODS
137 }
138
139 return NtUserSetImeHotKey(dwHotKeyId, uModifiers, uVirtualKey, hKL, dwAction);
140
141Failure:
143 return FALSE;
144}
145
146
147/* Win: LoadPreloadKeyboardLayouts */
149{
150 UINT nNumber, uFlags;
151 DWORD cbValue, dwType;
152 WCHAR szNumber[32], szValue[KL_NAMELENGTH];
153 HKEY hPreloadKey;
154 BOOL bOK = FALSE;
155 HKL hKL, hDefaultKL = NULL;
156
158 L"Keyboard Layout\\Preload",
159 &hPreloadKey) != ERROR_SUCCESS)
160 {
161 return;
162 }
163
164 for (nNumber = 1; nNumber <= 1000; ++nNumber)
165 {
166 _ultow(nNumber, szNumber, 10);
167
168 cbValue = sizeof(szValue);
169 if (RegQueryValueExW(hPreloadKey,
170 szNumber,
171 NULL,
172 &dwType,
173 (LPBYTE)szValue,
174 &cbValue) != ERROR_SUCCESS)
175 {
176 break;
177 }
178
179 if (dwType != REG_SZ)
180 continue;
181
182 if (nNumber == 1) /* The first entry is for default keyboard layout */
183 uFlags = KLF_SUBSTITUTE_OK | KLF_ACTIVATE | KLF_RESET;
184 else
186
187 hKL = LoadKeyboardLayoutW(szValue, uFlags);
188 if (hKL)
189 {
190 bOK = TRUE;
191 if (nNumber == 1) /* The first entry */
192 hDefaultKL = hKL;
193 }
194 }
195
196 RegCloseKey(hPreloadKey);
197
198 if (hDefaultKL)
199 SystemParametersInfoW(SPI_SETDEFAULTINPUTLANG, 0, &hDefaultKL, 0);
200
201 if (!bOK)
202 {
203 /* Fallback to English (US) */
204 LoadKeyboardLayoutW(L"00000409", KLF_SUBSTITUTE_OK | KLF_ACTIVATE | KLF_RESET);
205 }
206}
207
208
210CliSaveImeHotKey(DWORD dwID, UINT uModifiers, UINT uVirtualKey, HKL hKL, BOOL bDelete)
211{
213 LONG error;
214 HKEY hKey;
215 BOOL ret = FALSE, bRevertOnFailure = FALSE;
216
218 L"Control Panel\\Input Method\\Hot Keys\\%08lX", dwID);
219
220 if (bDelete)
221 {
223 return (error == ERROR_SUCCESS);
224 }
225
227 if (error == ERROR_SUCCESS)
228 {
229 bRevertOnFailure = TRUE;
230
231 // Set "Virtual Key"
232 error = RegSetValueExW(hKey, L"Virtual Key", 0, REG_BINARY,
233 (LPBYTE)&uVirtualKey, sizeof(uVirtualKey));
234 if (error == ERROR_SUCCESS)
235 {
236 // Set "Key Modifiers"
237 error = RegSetValueExW(hKey, L"Key Modifiers", 0, REG_BINARY,
238 (LPBYTE)&uModifiers, sizeof(uModifiers));
239 if (error == ERROR_SUCCESS)
240 {
241 // Set "Target IME"
242 error = RegSetValueExW(hKey, L"Target IME", 0, REG_BINARY,
243 (LPBYTE)&hKL, sizeof(hKL));
244 if (error == ERROR_SUCCESS)
245 {
246 // Success!
247 ret = TRUE;
248 bRevertOnFailure = FALSE;
249 }
250 }
251 }
253 }
254
255 if (bRevertOnFailure)
256 CliSaveImeHotKey(dwID, uVirtualKey, uModifiers, hKL, TRUE);
257
258 return ret;
259}
260
261/*
262 * @implemented
263 * Same as imm32!ImmSetHotKey.
264 */
265BOOL WINAPI CliImmSetHotKey(DWORD dwID, UINT uModifiers, UINT uVirtualKey, HKL hKL)
266{
267 BOOL ret;
268
269 if (uVirtualKey == 0) // Delete?
270 {
271 ret = CliSaveImeHotKey(dwID, uModifiers, uVirtualKey, hKL, TRUE);
272 if (ret)
273 CliImmSetHotKeyWorker(dwID, uModifiers, uVirtualKey, hKL, SETIMEHOTKEY_DELETE);
274 return ret;
275 }
276
277 // Add
278 ret = CliImmSetHotKeyWorker(dwID, uModifiers, uVirtualKey, hKL, SETIMEHOTKEY_ADD);
279 if (ret)
280 {
281 ret = CliSaveImeHotKey(dwID, uModifiers, uVirtualKey, hKL, FALSE);
282 if (!ret) // Failure?
283 CliImmSetHotKeyWorker(dwID, uModifiers, uVirtualKey, hKL, SETIMEHOTKEY_DELETE);
284 }
285
286 return ret;
287}
288
290{
291 LONG error;
292 HKEY hSubKey;
293 DWORD dwHotKeyId = 0;
294 UINT uModifiers = 0, uVirtualKey = 0;
295 HKL hKL = NULL;
296 UNICODE_STRING ustrName;
297
298 error = RegOpenKeyExW(hKey, pszSubKey, 0, KEY_READ, &hSubKey);
299 if (error != ERROR_SUCCESS)
300 return FALSE;
301
302 RtlInitUnicodeString(&ustrName, pszSubKey);
303 RtlUnicodeStringToInteger(&ustrName, 16, &dwHotKeyId);
304
305 uModifiers = CliReadRegistryValue(hSubKey, L"Key Modifiers");
306 hKL = (HKL)(ULONG_PTR)CliReadRegistryValue(hSubKey, L"Target IME");
307 uVirtualKey = CliReadRegistryValue(hSubKey, L"Virtual Key");
308
309 RegCloseKey(hSubKey);
310
311 return CliImmSetHotKeyWorker(dwHotKeyId, uModifiers, uVirtualKey, hKL, SETIMEHOTKEY_ADD);
312}
313
315{
316 HKEY hKey;
317 LONG error;
318 BOOL ret = FALSE;
319 DWORD dwIndex, cchKeyName;
320 WCHAR szKeyName[16];
321
323 L"Control Panel\\Input Method\\Hot Keys",
324 0,
325 KEY_READ,
326 &hKey);
327 if (error != ERROR_SUCCESS)
328 return ret;
329
330 for (dwIndex = 0; dwIndex < 1000; ++dwIndex)
331 {
332 cchKeyName = _countof(szKeyName);
333 error = RegEnumKeyExW(hKey, dwIndex, szKeyName, &cchKeyName, NULL, NULL, NULL, NULL);
334 if (error != ERROR_SUCCESS)
335 break;
336
337 szKeyName[_countof(szKeyName) - 1] = 0; /* Avoid stack overrun */
338
339 if (CliSetSingleHotKey(szKeyName, hKey))
340 ret = TRUE;
341 }
342
344 return ret;
345}
346
348{
349 WCHAR szValueName[33], szValue[16];
350 UNICODE_STRING ustrValue;
351 DWORD dwKL, cbValue, dwType;
352 UINT iNumber;
353 HKEY hKey;
354 LONG error;
355
356 error = RegOpenKeyExW(HKEY_CURRENT_USER, L"Keyboard Layout\\Preload", 0, KEY_READ, &hKey);
357 if (error != ERROR_SUCCESS)
358 return;
359
360 for (iNumber = 1; iNumber < 1000; ++iNumber)
361 {
362 _ultow(iNumber, szValueName, 10);
363
364 cbValue = sizeof(szValue);
365 error = RegQueryValueExW(hKey, szValueName, NULL, &dwType, (LPBYTE)szValue, &cbValue);
366 if (error != ERROR_SUCCESS)
367 break;
368
369 if (dwType != REG_SZ)
370 continue;
371
372 szValue[_countof(szValue) - 1] = 0; /* Avoid stack overrun */
373
374 RtlInitUnicodeString(&ustrValue, szValue);
375 RtlUnicodeStringToInteger(&ustrValue, 16, &dwKL);
376
377 IntSetFeKeyboardFlags(LOWORD(dwKL), pbFlags);
378 }
379
381}
382
384{
385 UINT uVirtualKey, uModifiers;
386 HKL hKL;
387
388 while (nCount-- > 0)
389 {
390 if (!bCheck || !NtUserGetImeHotKey(pEntries->dwHotKeyId, &uModifiers, &uVirtualKey, &hKL))
391 {
393 pEntries->uModifiers,
394 pEntries->uVirtualKey,
395 pEntries->hKL,
397 }
398 ++pEntries;
399 }
400}
401
403{
404 UINT nCount;
405 LPHKL pList;
406 UINT iIndex;
408 BYTE bFlags = 0;
409 BOOL bCheck;
410
412
414
415 if (dwAction == SETIMEHOTKEY_INITIALIZE)
416 {
419
421 }
422 else
423 {
425 if (!nCount)
426 return;
427
428 pList = RtlAllocateHeap(RtlGetProcessHeap(), 0, nCount * sizeof(HKL));
429 if (!pList)
430 return;
431
433
434 for (iIndex = 0; iIndex < nCount; ++iIndex)
435 {
436 LangID = LOWORD(pList[iIndex]);
438 }
439
440 RtlFreeHeap(RtlGetProcessHeap(), 0, pList);
441 }
442
443 if (bFlags & FE_JAPANESE)
445
446 if (bFlags & FE_CHINESE_TRADITIONAL)
448
449 if (bFlags & FE_CHINESE_SIMPLIFIED)
451}
452
453/*
454 * @implemented
455 */
456BOOL
457WINAPI
459 HWND hWnd,
460 POINT pt)
461{
462 return NtUserDragDetect(hWnd, pt);
463#if 0
464 MSG msg;
465 RECT rect;
466 POINT tmp;
469
470 rect.left = pt.x - dx;
471 rect.right = pt.x + dx;
472 rect.top = pt.y - dy;
473 rect.bottom = pt.y + dy;
474
476
477 for (;;)
478 {
479 while (
482 )
483 {
484 if (msg.message == WM_LBUTTONUP)
485 {
487 return FALSE;
488 }
489 if (msg.message == WM_MOUSEMOVE)
490 {
491 tmp.x = LOWORD(msg.lParam);
492 tmp.y = HIWORD(msg.lParam);
493 if (!PtInRect(&rect, tmp))
494 {
496 return TRUE;
497 }
498 }
499 if (msg.message == WM_KEYDOWN)
500 {
501 if (msg.wParam == VK_ESCAPE)
502 {
504 return TRUE;
505 }
506 }
507 }
508 WaitMessage();
509 }
510 return 0;
511#endif
512}
513
514/*
515 * @implemented
516 */
519{
521}
522
523/*
524 * @implemented
525 */
526SHORT
527WINAPI
530{
531 if (vKey < 0 || vKey > 256)
532 return 0;
533 return (SHORT)NtUserGetAsyncKeyState((DWORD)vKey);
534}
535
536
537/*
538 * @implemented
539 */
542{
543 return NtUserxGetKeyboardLayout(idThread);
544}
545
546
547/*
548 * @implemented
549 */
552{
553 return GetOEMCP();
554}
555
556
557/*
558 * @implemented
559 */
560int WINAPI
562 LPSTR lpString,
563 int nSize)
564{
565 LPWSTR pwszBuf;
566 UINT cchBuf = 0;
567 int iRet = 0;
568 BOOL defChar = FALSE;
569
570 pwszBuf = HeapAlloc(GetProcessHeap(), 0, nSize * sizeof(WCHAR));
571 if (!pwszBuf)
572 return 0;
573
574 cchBuf = NtUserGetKeyNameText(lParam, pwszBuf, nSize);
575
576 iRet = WideCharToMultiByte(CP_ACP, 0,
577 pwszBuf, cchBuf,
578 lpString, nSize, ".", &defChar); // FIXME: do we need defChar?
579 lpString[iRet] = 0;
580 HeapFree(GetProcessHeap(), 0, pwszBuf);
581
582 return iRet;
583}
584
585/*
586 * @implemented
587 */
588int WINAPI
590 LPWSTR lpString,
591 int nSize)
592{
593 return NtUserGetKeyNameText(lParam, lpString, nSize);
594}
595
596/*
597 * @implemented
598 */
599SHORT
600WINAPI
602GetKeyState(int nVirtKey)
603{
604 return (SHORT)NtUserGetKeyState((DWORD)nVirtKey);
605}
606
607/*
608 * @implemented
609 */
612{
614
616 return FALSE;
617
618 if (!WideCharToMultiByte(CP_ACP, 0, buf, -1, pwszKLID, KL_NAMELENGTH, NULL, NULL))
619 return FALSE;
620
621 return TRUE;
622}
623
624/*
625 * @implemented
626 */
629{
631
632 RtlInitEmptyUnicodeString(&Name,
633 pwszKLID,
634 KL_NAMELENGTH * sizeof(WCHAR));
635
637}
638
639/*
640 * @implemented
641 */
642int WINAPI
643GetKeyboardType(int nTypeFlag)
644{
645 return NtUserxGetKeyboardType(nTypeFlag);
646}
647
648/*
649 * @implemented
650 */
653{
654 TRACE("%p\n", plii);
655
656 if (plii->cbSize != sizeof (*plii))
657 {
659 return FALSE;
660 }
661
662 plii->dwTime = gpsi->dwLastRITEventTickCount;
663 return TRUE;
664}
665
666/*
667 * @implemented
668 */
671 UINT Flags)
672{
673 WCHAR wszKLID[16];
674
675 if (!MultiByteToWideChar(CP_ACP, 0, pszKLID, -1,
676 wszKLID, sizeof(wszKLID)/sizeof(wszKLID[0])))
677 {
678 return FALSE;
679 }
680
681 return LoadKeyboardLayoutW(wszKLID, Flags);
682}
683
684static inline BOOL IsValidKLID(_In_ LPCWSTR pwszKLID)
685{
686 return (pwszKLID != NULL) && (wcsspn(pwszKLID, L"0123456789ABCDEFabcdef") == (KL_NAMELENGTH - 1));
687}
688
690{
691 WCHAR szSysDir[MAX_PATH];
692 GetSystemDirectoryW(szSysDir, _countof(szSysDir));
693 StringCchPrintfW(pszPath, cchPath, L"%s\\%s", szSysDir, pszFileName);
694}
695
696#define ENGLISH_US MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)
697
698/*
699 * @unimplemented
700 *
701 * NOTE: We adopt a different design from Microsoft's one due to security reason.
702 * See NtUserLoadKeyboardLayoutEx.
703 */
706 _In_ HKL hklUnload,
707 _In_z_ LPCWSTR pwszKLID,
708 _In_ LANGID wLangID,
710 _In_ BOOL unknown5)
711{
712 DWORD dwKLID, dwHKL, dwType, dwSize;
713 UNICODE_STRING ustrKLID;
714 WCHAR wszRegKey[256] = L"SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\";
715 WCHAR wszLayoutId[10], wszNewKLID[KL_NAMELENGTH], szImeFileName[80];
716 HKL hNewKL;
717 HKEY hKey;
718 BOOL bIsIME;
719 WORD wLow, wHigh;
720
721 if (!IsValidKLID(pwszKLID))
722 {
723 ERR("pwszKLID: %s\n", debugstr_w(pwszKLID));
725 }
726
727 dwKLID = wcstoul(pwszKLID, NULL, 16);
728 bIsIME = IS_IME_HKL(UlongToHandle(dwKLID));
729
730 wLow = LOWORD(dwKLID);
731 wHigh = HIWORD(dwKLID);
732
734 {
735 /* Check substitutes key */
736 if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Keyboard Layout\\Substitutes", 0,
738 {
739 dwSize = sizeof(wszNewKLID);
740 if (RegQueryValueExW(hKey, pwszKLID, NULL, &dwType, (LPBYTE)wszNewKLID,
741 &dwSize) == ERROR_SUCCESS &&
742 dwType == REG_SZ)
743 {
744 /* Use new KLID value */
745 pwszKLID = wszNewKLID;
746 dwKLID = wcstoul(pwszKLID, NULL, 16);
747 wHigh = LOWORD(dwKLID);
748 }
749
750 /* Close the key now */
752 }
753 }
754
755 /* Append KLID at the end of registry key */
756 StringCbCatW(wszRegKey, sizeof(wszRegKey), pwszKLID);
757
758 /* Open layout registry key for read */
760 {
761 dwSize = sizeof(wszLayoutId);
762 if (RegQueryValueExW(hKey, L"Layout Id", NULL, &dwType, (LPBYTE)wszLayoutId,
763 &dwSize) == ERROR_SUCCESS && dwType == REG_SZ)
764 {
765 /* If Layout Id is specified, use this value | f000 as HIWORD */
766 wHigh = (0xF000 | wcstoul(wszLayoutId, NULL, 16));
767 }
768
769 if (bIsIME)
770 {
771 /* Check "IME File" value */
772 dwSize = sizeof(szImeFileName);
773 if (RegQueryValueExW(hKey, L"IME File", NULL, &dwType, (LPBYTE)szImeFileName,
775 {
776 bIsIME = FALSE;
777 wHigh = 0;
778 ERR("0x%X\n", dwKLID);
779 }
780 else
781 {
783 szImeFileName[_countof(szImeFileName) - 1] = UNICODE_NULL;
784 GetSystemLibraryPath(szPath, _countof(szPath), szImeFileName);
785
786 /* We don't allow the invalid "IME File" values due to security reason */
787 if (dwType != REG_SZ || szImeFileName[0] == 0 ||
788 wcscspn(szImeFileName, L":\\/") != wcslen(szImeFileName) ||
789 GetFileAttributesW(szPath) == INVALID_FILE_ATTRIBUTES) /* Does not exist? */
790 {
791 bIsIME = FALSE;
792 wHigh = 0;
793 ERR("'%s'\n", debugstr_w(szPath));
794 }
795 }
796 }
797
798 /* Close the key now */
800 }
801 else
802 {
803 ERR("Could not find keyboard layout %S.\n", pwszKLID);
804 return NULL;
805 }
806
807 if (wHigh == 0)
808 wHigh = wLow;
809
810 dwHKL = MAKELONG(wLow, wHigh);
811
812 RtlInitUnicodeString(&ustrKLID, pwszKLID);
813 hNewKL = NtUserLoadKeyboardLayoutEx(NULL, 0, NULL, hklUnload, &ustrKLID, dwHKL, Flags);
815 return hNewKL;
816}
817
818/*
819 * @implemented
820 */
823 UINT Flags)
824{
825 TRACE("(%s, 0x%X)\n", debugstr_w(pwszKLID), Flags);
826 return IntLoadKeyboardLayout(NULL, pwszKLID, 0, Flags, FALSE);
827}
828
829/*
830 * @unimplemented
831 */
834 LPCWSTR pwszKLID,
835 UINT Flags)
836{
837 FIXME("(%p, %s, 0x%X)", hklUnload, debugstr_w(pwszKLID), Flags);
838 if (!hklUnload)
839 return NULL;
840 return IntLoadKeyboardLayout(hklUnload, pwszKLID, 0, Flags, FALSE);
841}
842
843/*
844 * @implemented
845 */
847{
849 return FALSE;
850
852 return TRUE;
853}
854
855/*
856 * @implemented
857 */
860 UINT uMapType)
861{
862 return MapVirtualKeyExA(uCode, uMapType, GetKeyboardLayout(0));
863}
864
865/*
866 * @implemented
867 */
870 UINT uMapType,
871 HKL dwhkl)
872{
873 return MapVirtualKeyExW(uCode, uMapType, dwhkl);
874}
875
876
877/*
878 * @implemented
879 */
882 UINT uMapType,
883 HKL dwhkl)
884{
885 return NtUserMapVirtualKeyEx(uCode, uMapType, 0, dwhkl);
886}
887
888
889/*
890 * @implemented
891 */
894 UINT uMapType)
895{
896 return MapVirtualKeyExW(uCode, uMapType, GetKeyboardLayout(0));
897}
898
899
900/*
901 * @implemented
902 */
905{
906 WCHAR p;
907 SHORT Vk;
908 UINT Scan;
909
910 MultiByteToWideChar(CP_OEMCP, 0, (PCSTR)&wOemChar, 1, &p, 1);
911 Vk = VkKeyScanW(p);
912 Scan = MapVirtualKeyW((Vk & 0x00ff), 0);
913 if (!Scan) return -1;
914 /*
915 Page 450-1, MS W2k SuperBible by SAMS. Return, low word has the
916 scan code and high word has the shift state.
917 */
918 return ((Vk & 0xff00) << 8) | Scan;
919}
920
921
922/*
923 * @implemented
924 */
927{
929 uInterval,
930 NULL,
931 0);
932}
933
934
935/*
936 * @implemented
937 */
938BOOL
939WINAPI
941 BOOL fSwap)
942{
943 return NtUserxSwapMouseButton(fSwap);
944}
945
946
947/*
948 * @implemented
949 */
950int WINAPI
951ToAscii(UINT uVirtKey,
952 UINT uScanCode,
953 CONST BYTE *lpKeyState,
954 LPWORD lpChar,
955 UINT uFlags)
956{
957 return ToAsciiEx(uVirtKey, uScanCode, lpKeyState, lpChar, uFlags, 0);
958}
959
960
961/*
962 * @implemented
963 */
964int WINAPI
966 UINT uScanCode,
967 CONST BYTE *lpKeyState,
968 LPWORD lpChar,
969 UINT uFlags,
970 HKL dwhkl)
971{
972 WCHAR UniChars[2];
973 int Ret, CharCount;
974
975 Ret = ToUnicodeEx(uVirtKey, uScanCode, lpKeyState, UniChars, 2, uFlags, dwhkl);
976 CharCount = (Ret < 0 ? 1 : Ret);
977 WideCharToMultiByte(CP_ACP, 0, UniChars, CharCount, (LPSTR)lpChar, 2, NULL, NULL);
978
979 return Ret;
980}
981
982
983/*
984 * @implemented
985 */
986int WINAPI
988 UINT wScanCode,
989 CONST BYTE *lpKeyState,
990 LPWSTR pwszBuff,
991 int cchBuff,
992 UINT wFlags)
993{
994 return ToUnicodeEx(wVirtKey, wScanCode, lpKeyState, pwszBuff, cchBuff,
995 wFlags, 0);
996}
997
998
999/*
1000 * @implemented
1001 */
1002int WINAPI
1004 UINT wScanCode,
1005 CONST BYTE *lpKeyState,
1006 LPWSTR pwszBuff,
1007 int cchBuff,
1008 UINT wFlags,
1009 HKL dwhkl)
1010{
1011 return NtUserToUnicodeEx(wVirtKey, wScanCode, (PBYTE)lpKeyState, pwszBuff, cchBuff,
1012 wFlags, dwhkl);
1013}
1014
1015
1016
1017/*
1018 * @implemented
1019 */
1022{
1023 WCHAR wChar;
1024
1025 if (IsDBCSLeadByte(ch))
1026 return -1;
1027
1028 MultiByteToWideChar(CP_ACP, 0, &ch, 1, &wChar, 1);
1029 return VkKeyScanW(wChar);
1030}
1031
1032
1033/*
1034 * @implemented
1035 */
1038 HKL dwhkl)
1039{
1040 WCHAR wChar;
1041
1042 if (IsDBCSLeadByte(ch))
1043 return -1;
1044
1045 MultiByteToWideChar(CP_ACP, 0, &ch, 1, &wChar, 1);
1046 return VkKeyScanExW(wChar, dwhkl);
1047}
1048
1049
1050/*
1051 * @implemented
1052 */
1055 HKL dwhkl)
1056{
1057 return (SHORT)NtUserVkKeyScanEx(ch, dwhkl, TRUE);
1058}
1059
1060
1061/*
1062 * @implemented
1063 */
1066{
1067 return (SHORT)NtUserVkKeyScanEx(ch, 0, FALSE);
1068}
1069
1070
1071/*
1072 * @implemented
1073 */
1074VOID
1075WINAPI
1077 BYTE bVk,
1078 BYTE bScan,
1079 DWORD dwFlags,
1080 ULONG_PTR dwExtraInfo)
1081{
1082 INPUT Input;
1083
1084 Input.type = INPUT_KEYBOARD;
1085 Input.ki.wVk = bVk;
1086 Input.ki.wScan = bScan;
1087 Input.ki.dwFlags = dwFlags;
1088 Input.ki.time = 0;
1089 Input.ki.dwExtraInfo = dwExtraInfo;
1090
1091 NtUserSendInput(1, &Input, sizeof(INPUT));
1092}
1093
1094
1095/*
1096 * @implemented
1097 */
1098VOID
1099WINAPI
1101 DWORD dwFlags,
1102 DWORD dx,
1103 DWORD dy,
1104 DWORD dwData,
1105 ULONG_PTR dwExtraInfo)
1106{
1107 INPUT Input;
1108
1109 Input.type = INPUT_MOUSE;
1110 Input.mi.dx = dx;
1111 Input.mi.dy = dy;
1112 Input.mi.mouseData = dwData;
1113 Input.mi.dwFlags = dwFlags;
1114 Input.mi.time = 0;
1115 Input.mi.dwExtraInfo = dwExtraInfo;
1116
1117 NtUserSendInput(1, &Input, sizeof(INPUT));
1118}
1119
1120/* EOF */
#define DECLSPEC_HOTPATCH
Definition: _mingw.h:243
struct NameRec_ * Name
Definition: cdprocs.h:460
#define msg(x)
Definition: auth_time.c:54
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define ERR(fmt,...)
Definition: precomp.h:57
#define UlongToHandle(ul)
Definition: basetsd.h:97
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
Definition: heap.c:590
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:608
#define RegCloseKey(hKey)
Definition: registry.h:49
LPARAM lParam
Definition: combotst.c:139
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define APIENTRY
Definition: api.h:79
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2504
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3268
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
Definition: reg.c:1239
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
UINT uFlags
Definition: api.c:59
#define GetProcessHeap()
Definition: compat.h:736
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:109
#define SetLastError(x)
Definition: compat.h:752
#define HeapAlloc
Definition: compat.h:733
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define WideCharToMultiByte
Definition: compat.h:111
#define MultiByteToWideChar
Definition: compat.h:110
PSERVERINFO gpsi
Definition: imm.c:18
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2313
BOOL WINAPI IsDBCSLeadByte(BYTE testchar)
Definition: locale.c:2123
LCID WINAPI GetUserDefaultLCID(void)
Definition: locale.c:1210
UINT WINAPI GetOEMCP(void)
Definition: locale.c:2059
#define pt(x, y)
Definition: drawing.c:79
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
FxChildList * pList
FxAutoRegKey hKey
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLfloat GLfloat p
Definition: glext.h:8902
#define IS_IME_HKL(hKL)
Definition: imm32_undoc.h:20
HKL FAR * LPHKL
Definition: imm.h:24
#define MOD_LEFT
Definition: imm.h:188
#define IME_JHOTKEY_CLOSE_OPEN
Definition: imm.h:200
#define IME_THOTKEY_IME_NONIME_TOGGLE
Definition: imm.h:207
#define MOD_IGNORE_ALL_MODIFIER
Definition: imm.h:192
#define IME_CHOTKEY_IME_NONIME_TOGGLE
Definition: imm.h:195
#define MOD_SHIFT
Definition: imm.h:186
#define IME_KHOTKEY_SHAPE_TOGGLE
Definition: imm.h:203
#define MOD_CONTROL
Definition: imm.h:185
#define IME_HOTKEY_DSWITCH_LAST
Definition: imm.h:213
#define IME_THOTKEY_SHAPE_TOGGLE
Definition: imm.h:208
#define IME_HOTKEY_DSWITCH_FIRST
Definition: imm.h:212
#define MOD_RIGHT
Definition: imm.h:189
#define IME_CHOTKEY_SHAPE_TOGGLE
Definition: imm.h:196
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
_CRTIMP wchar_t *__cdecl _ultow(_In_ unsigned long _Value, _Pre_notnull_ _Post_z_ wchar_t *_Dest, _In_ int _Radix)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
SHORT NTAPI NtUserGetAsyncKeyState(INT Key)
Definition: keyboard.c:634
BOOL NTAPI NtUserUnloadKeyboardLayout(HKL hKl)
Definition: kbdlayout.c:1251
DWORD NTAPI NtUserVkKeyScanEx(WCHAR wChar, HKL KeyboardLayout, BOOL bUsehHK)
Definition: keyboard.c:1709
UINT NTAPI NtUserGetKeyboardLayoutList(ULONG nItems, HKL *pHklBuff)
Definition: kbdlayout.c:1038
BOOL NTAPI NtUserSetImeHotKey(DWORD dwHotKeyId, UINT uModifiers, UINT uVirtualKey, HKL hKL, DWORD dwAction)
Definition: ime.c:451
BOOL NTAPI NtUserSystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
Definition: sysparams.c:2168
DWORD NTAPI NtUserGetKeyNameText(LONG lParam, LPWSTR lpString, int nSize)
Definition: keyboard.c:1584
UINT NTAPI NtUserMapVirtualKeyEx(UINT keyCode, UINT transType, DWORD keyboardId, HKL dwhkl)
Definition: keyboard.c:1439
BOOL NTAPI NtUserGetImeHotKey(DWORD dwHotKeyId, LPUINT lpuModifiers, LPUINT lpuVirtualKey, LPHKL lphKL)
Definition: ime.c:406
INT NTAPI NtUserToUnicodeEx(UINT wVirtKey, UINT wScanCode, PBYTE lpKeyState, LPWSTR pwszBuff, int cchBuff, UINT wFlags, HKL dwhkl)
BOOL NTAPI NtUserDragDetect(HWND hWnd, POINT pt)
Definition: message.c:2209
BOOL NTAPI NtUserGetKeyboardLayoutName(_Inout_ PUNICODE_STRING pustrName)
Definition: kbdlayout.c:1092
SHORT NTAPI NtUserGetKeyState(INT VirtKey)
Definition: msgqueue.c:2556
HKL NTAPI NtUserLoadKeyboardLayoutEx(IN HANDLE hFile, IN DWORD offTable, IN PVOID pTables, IN HKL hOldKL, IN PUNICODE_STRING puszKLID, IN DWORD dwNewKL, IN UINT Flags)
Definition: kbdlayout.c:1161
#define debugstr_w
Definition: kernel32.h:32
#define REG_SZ
Definition: layer.c:22
USHORT LANGID
Definition: mui.h:9
GLint dy
Definition: linetemp.h:97
GLint dx
Definition: linetemp.h:97
#define error(str)
Definition: mkdosfs.c:1605
LPCWSTR szPath
Definition: env.c:37
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
static HANDLE ULONG_PTR dwData
Definition: file.c:35
#define _In_z_
Definition: ms_sal.h:313
#define _In_
Definition: ms_sal.h:308
UINT_PTR HKL
Definition: msctf.idl:143
unsigned int UINT
Definition: ndis.h:50
#define REG_BINARY
Definition: nt_native.h:1496
#define KEY_READ
Definition: nt_native.h:1023
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define FASTCALL
Definition: nt_native.h:50
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToInteger(PUNICODE_STRING String, ULONG Base, PULONG Value)
#define KEY_WRITE
Definition: nt_native.h:1031
#define UNICODE_NULL
#define L(x)
Definition: ntvdm.h:50
EXTINLINE BOOL NtUserxSwapMouseButton(BOOL fSwap)
Definition: ntwrapper.h:596
EXTINLINE BOOL NtUserxEnableWindow(HWND hWnd, BOOL bEnable)
Definition: ntwrapper.h:681
EXTINLINE INT NtUserxGetKeyboardType(INT nTypeFlag)
Definition: ntwrapper.h:631
EXTINLINE HKL NtUserxGetKeyboardLayout(DWORD idThread)
Definition: ntwrapper.h:626
#define LOWORD(l)
Definition: pedump.c:82
#define CONST
Definition: pedump.c:81
BYTE * PBYTE
Definition: pedump.c:66
short SHORT
Definition: pedump.c:59
long LONG
Definition: pedump.c:60
static const WCHAR szName[]
Definition: powrprof.c:45
_Check_return_ _CRTIMP size_t __cdecl wcsspn(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_Control)
_Check_return_ _CRTIMP size_t __cdecl wcscspn(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_Control)
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_CHINESE_SINGAPORE
Definition: nls.h:211
#define LANGIDFROMLCID(l)
Definition: nls.h:18
#define SUBLANG_CHINESE_TRADITIONAL
Definition: nls.h:208
#define SUBLANG_CHINESE_SIMPLIFIED
Definition: nls.h:209
#define SUBLANG_DEFAULT
Definition: nls.h:168
#define SUBLANG_CHINESE_HONGKONG
Definition: nls.h:210
#define LANG_CHINESE
Definition: nls.h:42
#define LANG_JAPANESE
Definition: nls.h:76
#define LANG_KOREAN
Definition: nls.h:84
#define SUBLANG_KOREAN
Definition: nls.h:280
@ Input
Definition: arc.h:84
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
& rect
Definition: startmenu.cpp:1413
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:342
UINT uVirtualKey
Definition: input.c:37
DWORD dwHotKeyId
Definition: input.c:36
UINT uModifiers
Definition: input.c:38
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
unsigned char * LPBYTE
Definition: typedefs.h:53
uint16_t * LPWORD
Definition: typedefs.h:56
int32_t INT
Definition: typedefs.h:58
const char * PCSTR
Definition: typedefs.h:52
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define MAKELONG(a, b)
Definition: typedefs.h:249
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
@ SETIMEHOTKEY_INITIALIZE
Definition: undocuser.h:409
@ SETIMEHOTKEY_ADD
Definition: undocuser.h:408
@ SETIMEHOTKEY_DELETE
Definition: undocuser.h:407
WORD WORD PSZ PSZ pszFileName
Definition: vdmdbg.h:44
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
int ret
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
Definition: wdfusb.h:1083
UINT APIENTRY NtUserSendInput(UINT nInputs, LPINPUT pInput, INT cbSize)
Definition: input.c:708
SHORT WINAPI VkKeyScanA(CHAR ch)
Definition: input.c:1021
int WINAPI GetKeyboardType(int nTypeFlag)
Definition: input.c:643
SHORT WINAPI VkKeyScanExW(WCHAR ch, HKL dwhkl)
Definition: input.c:1054
#define FE_KOREAN
Definition: input.c:66
VOID APIENTRY CliImmInitializeHotKeys(DWORD dwAction, HKL hKL)
Definition: input.c:402
#define ENGLISH_US
Definition: input.c:696
BOOL WINAPI DragDetect(HWND hWnd, POINT pt)
Definition: input.c:458
UINT WINAPI MapVirtualKeyA(UINT uCode, UINT uMapType)
Definition: input.c:859
#define FE_JAPANESE
Definition: input.c:63
HKL WINAPI LoadKeyboardLayoutW(LPCWSTR pwszKLID, UINT Flags)
Definition: input.c:822
VOID GetSystemLibraryPath(LPWSTR pszPath, INT cchPath, LPCWSTR pszFileName)
Definition: input.c:689
HKL WINAPI LoadKeyboardLayoutA(LPCSTR pszKLID, UINT Flags)
Definition: input.c:670
VOID APIENTRY CliGetPreloadKeyboardLayouts(PBYTE pbFlags)
Definition: input.c:347
static BOOL IsValidKLID(_In_ LPCWSTR pwszKLID)
Definition: input.c:684
IMEHOTKEYENTRY DefaultHotKeyTableT[]
Definition: input.c:49
HKL APIENTRY IntLoadKeyboardLayout(_In_ HKL hklUnload, _In_z_ LPCWSTR pwszKLID, _In_ LANGID wLangID, _In_ UINT Flags, _In_ BOOL unknown5)
Definition: input.c:705
BOOL APIENTRY CliImmSetHotKeyWorker(DWORD dwHotKeyId, UINT uModifiers, UINT uVirtualKey, HKL hKL, DWORD dwAction)
Definition: input.c:111
struct tagIMEHOTKEYENTRY IMEHOTKEYENTRY
IMEHOTKEYENTRY DefaultHotKeyTableC[]
Definition: input.c:56
#define FE_CHINESE_SIMPLIFIED
Definition: input.c:65
BOOL WINAPI SwapMouseButton(BOOL fSwap)
Definition: input.c:940
BOOL WINAPI EnableWindow(HWND hWnd, BOOL bEnable)
Definition: input.c:518
#define FE_CHINESE_TRADITIONAL
Definition: input.c:64
BOOL WINAPI CliImmSetHotKey(DWORD dwID, UINT uModifiers, UINT uVirtualKey, HKL hKL)
Definition: input.c:265
VOID FASTCALL IntSetFeKeyboardFlags(LANGID LangID, PBYTE pbFlags)
Definition: input.c:70
BOOL FASTCALL CliGetImeHotKeysFromRegistry(VOID)
Definition: input.c:314
struct tagIMEHOTKEYENTRY * PIMEHOTKEYENTRY
#define MOD_ALL_MODS
VOID IntLoadPreloadKeyboardLayouts(VOID)
Definition: input.c:148
IMEHOTKEYENTRY DefaultHotKeyTableJ[]
Definition: input.c:43
DWORD FASTCALL CliReadRegistryValue(HANDLE hKey, LPCWSTR pszName)
Definition: input.c:97
BOOL WINAPI SetDoubleClickTime(UINT uInterval)
Definition: input.c:926
SHORT WINAPI VkKeyScanExA(CHAR ch, HKL dwhkl)
Definition: input.c:1037
HKL WINAPI LoadKeyboardLayoutEx(HKL hklUnload, LPCWSTR pwszKLID, UINT Flags)
Definition: input.c:833
VOID APIENTRY CliSetDefaultImeHotKeys(PIMEHOTKEYENTRY pEntries, UINT nCount, BOOL bCheck)
Definition: input.c:383
BOOL FASTCALL CliSetSingleHotKey(LPCWSTR pszSubKey, HANDLE hKey)
Definition: input.c:289
BOOL APIENTRY CliSaveImeHotKey(DWORD dwID, UINT uModifiers, UINT uVirtualKey, HKL hKL, BOOL bDelete)
Definition: input.c:210
BOOL WINAPI GetLastInputInfo(PLASTINPUTINFO plii)
Definition: input.c:652
UINT WINAPI MapVirtualKeyExW(UINT uCode, UINT uMapType, HKL dwhkl)
Definition: input.c:881
BOOL WINAPI UnloadKeyboardLayout(HKL hKL)
Definition: input.c:846
#define INPUT_KEYBOARD
Definition: winable.h:10
#define INPUT_MOUSE
Definition: winable.h:9
*nSize LPSTR _Inout_ LPDWORD nSize
Definition: winbase.h:2084
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ BOOL bEnable
Definition: winddi.h:3426
#define WINAPI
Definition: msvc.h:6
#define CP_OEMCP
Definition: winnls.h:231
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
HWND WINAPI SetCapture(_In_ HWND hWnd)
BOOL WINAPI GetKeyboardLayoutNameW(_Out_writes_(KL_NAMELENGTH) LPWSTR)
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
void WINAPI mouse_event(_In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ ULONG_PTR)
#define WM_MOUSEFIRST
Definition: winuser.h:1777
#define SM_CXDRAG
Definition: winuser.h:1031
BOOL WINAPI GetKeyboardLayoutNameA(_Out_writes_(KL_NAMELENGTH) LPSTR)
#define WM_MOUSELAST
Definition: winuser.h:1804
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890
UINT WINAPI MapVirtualKeyExA(_In_ UINT, _In_ UINT, _In_opt_ HKL)
#define KL_NAMELENGTH
Definition: winuser.h:122
int WINAPI GetKeyNameTextA(_In_ LONG lParam, _Out_writes_(cchSize) LPSTR lpString, _In_ int cchSize)
#define KLF_REPLACELANG
Definition: winuser.h:115
#define VK_SPACE
Definition: winuser.h:2222
#define KLF_ACTIVATE
Definition: winuser.h:111
int WINAPI ToAscii(_In_ UINT, _In_ UINT, _In_reads_opt_(256) CONST BYTE *, _Out_ LPWORD, _In_ UINT)
#define WM_KEYFIRST
Definition: winuser.h:1717
int WINAPI ToUnicode(_In_ UINT wVirtKey, _In_ UINT wScanCode, _In_reads_bytes_opt_(256) CONST BYTE *lpKeyState, _Out_writes_(cchBuff) LPWSTR pwszBuff, _In_ int cchBuff, _In_ UINT wFlags)
#define WM_MOUSEMOVE
Definition: winuser.h:1778
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
UINT WINAPI MapVirtualKeyW(_In_ UINT, _In_ UINT)
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
int WINAPI GetKeyNameTextW(_In_ LONG lParam, _Out_writes_(cchSize) LPWSTR lpString, _In_ int cchSize)
#define VK_KANJI
Definition: winuser.h:2216
#define PM_REMOVE
Definition: winuser.h:1199
BOOL WINAPI WaitMessage(void)
Definition: ntwrapper.h:350
#define SPI_SETDOUBLECLICKTIME
Definition: winuser.h:1384
#define KLF_SUBSTITUTE_OK
Definition: winuser.h:112
VOID WINAPI keybd_event(_In_ BYTE, _In_ BYTE, _In_ DWORD, _In_ ULONG_PTR)
#define WM_LBUTTONUP
Definition: winuser.h:1780
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
#define KLF_NOTELLSHELL
Definition: winuser.h:116
int WINAPI ToUnicodeEx(_In_ UINT wVirtKey, _In_ UINT wScanCode, _In_reads_bytes_(256) CONST BYTE *lpKeyState, _Out_writes_(cchBuff) LPWSTR pwszBuff, _In_ int cchBuff, _In_ UINT wFlags, _In_opt_ HKL dwhkl)
SHORT WINAPI GetAsyncKeyState(_In_ int)
#define WM_KEYDOWN
Definition: winuser.h:1718
DWORD WINAPI OemKeyScan(_In_ WORD)
#define SM_CYDRAG
Definition: winuser.h:1032
#define WM_KEYLAST
Definition: winuser.h:1731
int WINAPI ToAsciiEx(_In_ UINT, _In_ UINT, _In_reads_opt_(256) CONST BYTE *, _Out_ LPWORD, _In_ UINT, _In_opt_ HKL)
#define VK_ESCAPE
Definition: winuser.h:2217
SHORT WINAPI VkKeyScanW(_In_ WCHAR)
int WINAPI GetSystemMetrics(_In_ int)
UINT WINAPI GetKBCodePage(void)
Definition: input.c:551
SHORT WINAPI GetKeyState(_In_ int)
BOOL bScan
Definition: wlanconf.c:23
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
const char * LPCSTR
Definition: xmlstorage.h:183
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
char CHAR
Definition: xmlstorage.h:175
unsigned char BYTE
Definition: xxhash.c:193