From: Matteo Bruni <mbruni@codeweavers.com> --- dlls/win32u/input.c | 9 +++++++++ dlls/win32u/message.c | 2 +- dlls/win32u/win32u_private.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index 733eb604fdc..adfbe306643 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -1235,6 +1235,15 @@ USHORT map_scan_to_kbd_vkey( USHORT scan, HKL layout ) return vkey; } +USHORT fixup_scancode( USHORT scan ) +{ + /* PAUSE, NUMLOCK are special */ + if (scan == 0x21d) scan = 0x45; + else if (scan == 0x45) scan = 0x145; + return scan; +} + + /**************************************************************************** * NtUserGetKeyNameText (win32u.@) */ diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index 1428ff586f4..521430ef78f 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -3946,7 +3946,7 @@ NTSTATUS send_hardware_message( HWND hwnd, UINT flags, const INPUT *input, LPARA if (input->ki.dwFlags & KEYEVENTF_EXTENDEDKEY) scan |= 0xe000; } req->input.kbd.vkey = map_scan_to_kbd_vkey( scan, layout ); - req->input.kbd.scan = input->ki.wScan & 0xff; + req->input.kbd.scan = fixup_scancode( input->ki.wScan & 0xff ); } else { diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index be303ae4d13..a731fa8b18c 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -111,6 +111,7 @@ extern void update_current_mouse_window( HWND hwnd, INT hittest, POINT pos ); extern BOOL process_wine_clipcursor( HWND hwnd, UINT flags, BOOL reset ); extern BOOL clip_fullscreen_window( HWND hwnd, BOOL reset ); extern USHORT map_scan_to_kbd_vkey( USHORT scan, HKL layout ); +extern USHORT fixup_scancode( USHORT scan ); /* menu.c */ extern UINT draw_nc_menu_bar( HDC hdc, RECT *rect, HWND hwnd ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10963