Huw Davies : user32: Implement OemKeyScan().
Module: wine Branch: master Commit: b7c5ff05a72716d92dd2fa399f960d42b69fcb97 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b7c5ff05a72716d92dd2fa399f... Author: Huw Davies <huw(a)codeweavers.com> Date: Thu Sep 22 11:12:38 2016 +0100 user32: Implement OemKeyScan(). Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/user32/input.c | 17 +++++++++++++++-- dlls/user32/tests/input.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/dlls/user32/input.c b/dlls/user32/input.c index 63fae67..44b7e70 100644 --- a/dlls/user32/input.c +++ b/dlls/user32/input.c @@ -884,9 +884,22 @@ WORD WINAPI VkKeyScanExW(WCHAR cChar, HKL dwhkl) /********************************************************************** * OemKeyScan (USER32.@) */ -DWORD WINAPI OemKeyScan(WORD wOemChar) +DWORD WINAPI OemKeyScan( WORD oem ) { - return wOemChar; + WCHAR wchr; + DWORD vkey, scan; + char oem_char = LOBYTE( oem ); + + if (!OemToCharBuffW( &oem_char, &wchr, 1 )) + return -1; + + vkey = VkKeyScanW( wchr ); + scan = MapVirtualKeyW( LOBYTE( vkey ), MAPVK_VK_TO_VSC ); + if (!scan) return -1; + + vkey &= 0xff00; + vkey <<= 8; + return vkey | scan; } /****************************************************************************** diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c index 1813367..8e89481 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c @@ -53,6 +53,7 @@ #include "windef.h" #include "winbase.h" #include "winuser.h" +#include "winnls.h" #include "wine/test.h" @@ -2493,6 +2494,36 @@ static void test_GetKeyState(void) CloseHandle(semaphores[1]); } +static void test_OemKeyScan(void) +{ + DWORD ret, expect, vkey, scan; + WCHAR oem, wchr; + char oem_char; + + for (oem = 0; oem < 0x200; oem++) + { + ret = OemKeyScan( oem ); + + oem_char = LOBYTE( oem ); + if (!OemToCharBuffW( &oem_char, &wchr, 1 )) + expect = -1; + else + { + vkey = VkKeyScanW( wchr ); + scan = MapVirtualKeyW( LOBYTE( vkey ), MAPVK_VK_TO_VSC ); + if (!scan) + expect = -1; + else + { + vkey &= 0xff00; + vkey <<= 8; + expect = vkey | scan; + } + } + ok( ret == expect, "%04x: got %08x expected %08x\n", oem, ret, expect ); + } +} + START_TEST(input) { init_function_pointers(); @@ -2516,6 +2547,7 @@ START_TEST(input) test_key_names(); test_attach_input(); test_GetKeyState(); + test_OemKeyScan(); if(pGetMouseMovePointsEx) test_GetMouseMovePointsEx();
participants (1)
-
Alexandre Julliard