diff --git a/reactos/include/reactos/win32k/ntuser.h b/reactos/include/reactos/win32k/ntuser.h index ad798885025..08b2e7a426c 100644 --- a/reactos/include/reactos/win32k/ntuser.h +++ b/reactos/include/reactos/win32k/ntuser.h @@ -2357,7 +2357,7 @@ DWORD NTAPI NtUserVkKeyScanEx( WCHAR wChar, - ULONG_PTR KeyboardLayout, + HKL KeyboardLayout, DWORD Unknown2); DWORD diff --git a/reactos/subsystems/win32/win32k/ntuser/keyboard.c b/reactos/subsystems/win32/win32k/ntuser/keyboard.c index fa352f0949e..0620235440e 100644 --- a/reactos/subsystems/win32/win32k/ntuser/keyboard.c +++ b/reactos/subsystems/win32/win32k/ntuser/keyboard.c @@ -196,10 +196,18 @@ static DWORD ModBits( PKBDTABLES pkKT, PBYTE KeyState ) KS_DOWN_BIT) ModBits |= GetShiftBit( pkKT, VK_SHIFT ); + if (KeysSet( pkKT, KeyState, VK_SHIFT, 0 ) & + KS_DOWN_BIT) + ModBits |= GetShiftBit( pkKT, VK_SHIFT ); + if (KeysSet( pkKT, KeyState, VK_LCONTROL, VK_RCONTROL ) & KS_DOWN_BIT ) ModBits |= GetShiftBit( pkKT, VK_CONTROL ); + if (KeysSet( pkKT, KeyState, VK_CONTROL, 0 ) & + KS_DOWN_BIT ) + ModBits |= GetShiftBit( pkKT, VK_CONTROL ); + if (KeysSet( pkKT, KeyState, VK_LMENU, VK_RMENU ) & KS_DOWN_BIT ) ModBits |= GetShiftBit( pkKT, VK_MENU ); @@ -408,36 +416,6 @@ CLEANUP: -int STDCALL ToUnicodeEx( UINT wVirtKey, - UINT wScanCode, - PBYTE lpKeyState, - LPWSTR pwszBuff, - int cchBuff, - UINT wFlags, - HKL dwhkl ) -{ - int ToUnicodeResult = 0; - - if (0 == (lpKeyState[wVirtKey] & KS_DOWN_BIT)) - { - ToUnicodeResult = 0; - } - else - { - ToUnicodeResult = ToUnicodeInner( wVirtKey, - wScanCode, - lpKeyState, - pwszBuff, - cchBuff, - wFlags, - PsGetCurrentThreadWin32Thread() ? - PsGetCurrentThreadWin32Thread()->KeyboardLayout->KBTables : 0 ); - } - - return ToUnicodeResult; -} - - BOOL FASTCALL IntTranslateKbdMessage(LPMSG lpMsg, HKL dwhkl) @@ -741,13 +719,14 @@ NtUserToUnicodeEx( } RtlZeroMemory( OutPwszBuff, sizeof( WCHAR ) * cchBuff ); - ret = ToUnicodeEx( wVirtKey, - wScanCode, - KeyStateBuf, - OutPwszBuff, - cchBuff, - wFlags, - dwhkl ); + ret = ToUnicodeInner( wVirtKey, + wScanCode, + KeyStateBuf, + OutPwszBuff, + cchBuff, + wFlags, + PsGetCurrentThreadWin32Thread() ? + PsGetCurrentThreadWin32Thread()->KeyboardLayout->KBTables : 0 ); MmCopyToCaller(pwszBuff,OutPwszBuff,sizeof(WCHAR)*cchBuff); ExFreePool(OutPwszBuff); @@ -1008,7 +987,7 @@ DWORD STDCALL NtUserVkKeyScanEx( WCHAR wChar, - ULONG_PTR KeyboardLayout, + HKL KeyboardLayout, DWORD Unknown2) { /* FIXME: currently, this routine doesnt seem to need any locking */ @@ -1023,7 +1002,7 @@ NtUserVkKeyScanEx( if(!KeyboardLayout) return -1; - KeyLayout = UserHklToKbl((HKL)KeyboardLayout)->KBTables; + KeyLayout = UserHklToKbl(KeyboardLayout)->KBTables; for (nMod = 0; KeyLayout->pVkToWcharTable[nMod].nModifications; nMod++) {