mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 21:45:41 +00:00
fix bug in NtUserToUnicodeEx. It still ignores the hkl parameter.
NtUserVkScanKeyEx: use HKL instead of ULONG_PTR. See issue #2557 for more details. svn path=/trunk/; revision=30318
This commit is contained in:
parent
7248541e08
commit
83134d10e3
2 changed files with 19 additions and 40 deletions
|
@ -2357,7 +2357,7 @@ DWORD
|
|||
NTAPI
|
||||
NtUserVkKeyScanEx(
|
||||
WCHAR wChar,
|
||||
ULONG_PTR KeyboardLayout,
|
||||
HKL KeyboardLayout,
|
||||
DWORD Unknown2);
|
||||
|
||||
DWORD
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue