mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 21:44:31 +00:00
[NTUSER] Fix UserSendKeyboardInput() KEYEVENTF_SCANCODE use case (CORE-17144)
This commit is contained in:
parent
74513a75ab
commit
a602bc3550
|
@ -23,6 +23,7 @@ list(APPEND SOURCE
|
||||||
GetUserObjectInformation.c
|
GetUserObjectInformation.c
|
||||||
GetWindowPlacement.c
|
GetWindowPlacement.c
|
||||||
InitializeLpkHooks.c
|
InitializeLpkHooks.c
|
||||||
|
keybd_event.c
|
||||||
LoadImage.c
|
LoadImage.c
|
||||||
LookupIconIdFromDirectoryEx.c
|
LookupIconIdFromDirectoryEx.c
|
||||||
MessageStateAnalyzer.c
|
MessageStateAnalyzer.c
|
||||||
|
|
42
modules/rostests/apitests/user32/keybd_event.c
Normal file
42
modules/rostests/apitests/user32/keybd_event.c
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS api tests
|
||||||
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
|
* PURPOSE: Test for keyboard inputs with flags KEYEVENTF_EXTENDEDKEY and KEYEVENTF_SCANCODE
|
||||||
|
* COPYRIGHT: Copyright 2021 Arjav Garg <arjavgarg@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "precomp.h"
|
||||||
|
|
||||||
|
static void testScancodeExtendedKey(BYTE wVk, BYTE scanCode)
|
||||||
|
{
|
||||||
|
trace("wVK: %x\tScancode: %x\n", wVk, scanCode);
|
||||||
|
|
||||||
|
keybd_event(0, scanCode, KEYEVENTF_SCANCODE | KEYEVENTF_EXTENDEDKEY, 0);
|
||||||
|
SHORT winKeyState = GetAsyncKeyState(wVk);
|
||||||
|
ok(winKeyState & 0x8000, "VK=%x should be detected as key down.\n", wVk);
|
||||||
|
|
||||||
|
keybd_event(0, scanCode, KEYEVENTF_SCANCODE | KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
|
||||||
|
winKeyState = GetAsyncKeyState(wVk);
|
||||||
|
ok(!(winKeyState & 0x8000), "VK=%x should be detected as key up.\n", wVk);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* https://docs.microsoft.com/en-us/windows/win32/inputdev/about-keyboard-input#extended-key-flag */
|
||||||
|
START_TEST(keybd_event)
|
||||||
|
{
|
||||||
|
testScancodeExtendedKey(VK_RWIN, 0x5C);
|
||||||
|
testScancodeExtendedKey(VK_LWIN, 0x5B);
|
||||||
|
testScancodeExtendedKey(VK_RMENU, 0x38);
|
||||||
|
testScancodeExtendedKey(VK_RCONTROL, 0x1D);
|
||||||
|
testScancodeExtendedKey(VK_INSERT, 0x52);
|
||||||
|
testScancodeExtendedKey(VK_DELETE, 0x53);
|
||||||
|
testScancodeExtendedKey(VK_HOME, 0x47);
|
||||||
|
testScancodeExtendedKey(VK_END, 0x4f);
|
||||||
|
testScancodeExtendedKey(VK_PRIOR, 0x49);
|
||||||
|
testScancodeExtendedKey(VK_NEXT, 0x51);
|
||||||
|
testScancodeExtendedKey(VK_UP, 0x48);
|
||||||
|
testScancodeExtendedKey(VK_RIGHT, 0x4d);
|
||||||
|
testScancodeExtendedKey(VK_LEFT, 0x4b);
|
||||||
|
testScancodeExtendedKey(VK_DOWN, 0x50);
|
||||||
|
testScancodeExtendedKey(VK_DIVIDE, 0x35);
|
||||||
|
testScancodeExtendedKey(VK_RETURN, 0x1C);
|
||||||
|
}
|
|
@ -25,6 +25,7 @@ extern void func_GetSystemMetrics(void);
|
||||||
extern void func_GetUserObjectInformation(void);
|
extern void func_GetUserObjectInformation(void);
|
||||||
extern void func_GetWindowPlacement(void);
|
extern void func_GetWindowPlacement(void);
|
||||||
extern void func_InitializeLpkHooks(void);
|
extern void func_InitializeLpkHooks(void);
|
||||||
|
extern void func_keybd_event(void);
|
||||||
extern void func_LoadImage(void);
|
extern void func_LoadImage(void);
|
||||||
extern void func_LookupIconIdFromDirectoryEx(void);
|
extern void func_LookupIconIdFromDirectoryEx(void);
|
||||||
extern void func_MessageStateAnalyzer(void);
|
extern void func_MessageStateAnalyzer(void);
|
||||||
|
@ -76,6 +77,7 @@ const struct test winetest_testlist[] =
|
||||||
{ "GetUserObjectInformation", func_GetUserObjectInformation },
|
{ "GetUserObjectInformation", func_GetUserObjectInformation },
|
||||||
{ "GetWindowPlacement", func_GetWindowPlacement },
|
{ "GetWindowPlacement", func_GetWindowPlacement },
|
||||||
{ "InitializeLpkHooks", func_InitializeLpkHooks },
|
{ "InitializeLpkHooks", func_InitializeLpkHooks },
|
||||||
|
{ "keybd_event", func_keybd_event },
|
||||||
{ "LoadImage", func_LoadImage },
|
{ "LoadImage", func_LoadImage },
|
||||||
{ "LookupIconIdFromDirectoryEx", func_LookupIconIdFromDirectoryEx },
|
{ "LookupIconIdFromDirectoryEx", func_LookupIconIdFromDirectoryEx },
|
||||||
{ "MessageStateAnalyzer", func_MessageStateAnalyzer },
|
{ "MessageStateAnalyzer", func_MessageStateAnalyzer },
|
||||||
|
|
|
@ -1020,8 +1020,11 @@ UserSendKeyboardInput(KEYBDINPUT *pKbdInput, BOOL bInjected)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wVk = pKbdInput->wVk & 0xFF;
|
wVk = pKbdInput->wVk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Remove all virtual key flags (KBDEXT, KBDMULTIVK, KBDSPECIAL, KBDNUMPAD) */
|
||||||
|
wVk &= 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If time is given, use it */
|
/* If time is given, use it */
|
||||||
|
|
Loading…
Reference in a new issue