mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 03:46:38 +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
|
NTAPI
|
||||||
NtUserVkKeyScanEx(
|
NtUserVkKeyScanEx(
|
||||||
WCHAR wChar,
|
WCHAR wChar,
|
||||||
ULONG_PTR KeyboardLayout,
|
HKL KeyboardLayout,
|
||||||
DWORD Unknown2);
|
DWORD Unknown2);
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
|
|
|
@ -196,10 +196,18 @@ static DWORD ModBits( PKBDTABLES pkKT, PBYTE KeyState )
|
||||||
KS_DOWN_BIT)
|
KS_DOWN_BIT)
|
||||||
ModBits |= GetShiftBit( pkKT, VK_SHIFT );
|
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 ) &
|
if (KeysSet( pkKT, KeyState, VK_LCONTROL, VK_RCONTROL ) &
|
||||||
KS_DOWN_BIT )
|
KS_DOWN_BIT )
|
||||||
ModBits |= GetShiftBit( pkKT, VK_CONTROL );
|
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 ) &
|
if (KeysSet( pkKT, KeyState, VK_LMENU, VK_RMENU ) &
|
||||||
KS_DOWN_BIT )
|
KS_DOWN_BIT )
|
||||||
ModBits |= GetShiftBit( pkKT, VK_MENU );
|
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
|
BOOL FASTCALL
|
||||||
IntTranslateKbdMessage(LPMSG lpMsg,
|
IntTranslateKbdMessage(LPMSG lpMsg,
|
||||||
HKL dwhkl)
|
HKL dwhkl)
|
||||||
|
@ -741,13 +719,14 @@ NtUserToUnicodeEx(
|
||||||
}
|
}
|
||||||
RtlZeroMemory( OutPwszBuff, sizeof( WCHAR ) * cchBuff );
|
RtlZeroMemory( OutPwszBuff, sizeof( WCHAR ) * cchBuff );
|
||||||
|
|
||||||
ret = ToUnicodeEx( wVirtKey,
|
ret = ToUnicodeInner( wVirtKey,
|
||||||
wScanCode,
|
wScanCode,
|
||||||
KeyStateBuf,
|
KeyStateBuf,
|
||||||
OutPwszBuff,
|
OutPwszBuff,
|
||||||
cchBuff,
|
cchBuff,
|
||||||
wFlags,
|
wFlags,
|
||||||
dwhkl );
|
PsGetCurrentThreadWin32Thread() ?
|
||||||
|
PsGetCurrentThreadWin32Thread()->KeyboardLayout->KBTables : 0 );
|
||||||
|
|
||||||
MmCopyToCaller(pwszBuff,OutPwszBuff,sizeof(WCHAR)*cchBuff);
|
MmCopyToCaller(pwszBuff,OutPwszBuff,sizeof(WCHAR)*cchBuff);
|
||||||
ExFreePool(OutPwszBuff);
|
ExFreePool(OutPwszBuff);
|
||||||
|
@ -1008,7 +987,7 @@ DWORD
|
||||||
STDCALL
|
STDCALL
|
||||||
NtUserVkKeyScanEx(
|
NtUserVkKeyScanEx(
|
||||||
WCHAR wChar,
|
WCHAR wChar,
|
||||||
ULONG_PTR KeyboardLayout,
|
HKL KeyboardLayout,
|
||||||
DWORD Unknown2)
|
DWORD Unknown2)
|
||||||
{
|
{
|
||||||
/* FIXME: currently, this routine doesnt seem to need any locking */
|
/* FIXME: currently, this routine doesnt seem to need any locking */
|
||||||
|
@ -1023,7 +1002,7 @@ NtUserVkKeyScanEx(
|
||||||
|
|
||||||
if(!KeyboardLayout)
|
if(!KeyboardLayout)
|
||||||
return -1;
|
return -1;
|
||||||
KeyLayout = UserHklToKbl((HKL)KeyboardLayout)->KBTables;
|
KeyLayout = UserHklToKbl(KeyboardLayout)->KBTables;
|
||||||
|
|
||||||
for (nMod = 0; KeyLayout->pVkToWcharTable[nMod].nModifications; nMod++)
|
for (nMod = 0; KeyLayout->pVkToWcharTable[nMod].nModifications; nMod++)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue