diff --git a/reactos/subsys/win32k/ntuser/input.c b/reactos/subsys/win32k/ntuser/input.c index 163e5599a8a..3488db9077d 100644 --- a/reactos/subsys/win32k/ntuser/input.c +++ b/reactos/subsys/win32k/ntuser/input.c @@ -35,6 +35,8 @@ #define NDEBUG #include +extern BYTE QueueKeyStateTable[]; + /* GLOBALS *******************************************************************/ static HANDLE MouseDeviceHandle; @@ -986,36 +988,42 @@ IntMouseInput(MOUSEINPUT *mi) Msg.message = 0; if(mi->dwFlags & MOUSEEVENTF_LEFTDOWN) { + QueueKeyStateTable[VK_LBUTTON] |= 0xc0; Msg.message = SwapBtnMsg[0][SwapButtons]; CurInfo->ButtonsDown |= SwapBtn[SwapButtons]; MsqInsertSystemMessage(&Msg); } else if(mi->dwFlags & MOUSEEVENTF_LEFTUP) { + QueueKeyStateTable[VK_LBUTTON] &= ~0x80; Msg.message = SwapBtnMsg[1][SwapButtons]; CurInfo->ButtonsDown &= ~SwapBtn[SwapButtons]; MsqInsertSystemMessage(&Msg); } if(mi->dwFlags & MOUSEEVENTF_MIDDLEDOWN) { + QueueKeyStateTable[VK_MBUTTON] |= 0xc0; Msg.message = WM_MBUTTONDOWN; CurInfo->ButtonsDown |= MK_MBUTTON; MsqInsertSystemMessage(&Msg); } else if(mi->dwFlags & MOUSEEVENTF_MIDDLEUP) { + QueueKeyStateTable[VK_MBUTTON] &= ~0x80; Msg.message = WM_MBUTTONUP; CurInfo->ButtonsDown &= ~MK_MBUTTON; MsqInsertSystemMessage(&Msg); } if(mi->dwFlags & MOUSEEVENTF_RIGHTDOWN) { + QueueKeyStateTable[VK_RBUTTON] |= 0xc0; Msg.message = SwapBtnMsg[0][!SwapButtons]; CurInfo->ButtonsDown |= SwapBtn[!SwapButtons]; MsqInsertSystemMessage(&Msg); } else if(mi->dwFlags & MOUSEEVENTF_RIGHTUP) { + QueueKeyStateTable[VK_RBUTTON] &= ~0x80; Msg.message = SwapBtnMsg[1][!SwapButtons]; CurInfo->ButtonsDown &= ~SwapBtn[!SwapButtons]; MsqInsertSystemMessage(&Msg); @@ -1033,12 +1041,14 @@ IntMouseInput(MOUSEINPUT *mi) Msg.message = WM_XBUTTONDOWN; if(mi->mouseData & XBUTTON1) { + QueueKeyStateTable[VK_XBUTTON1] |= 0xc0; Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON1); CurInfo->ButtonsDown |= XBUTTON1; MsqInsertSystemMessage(&Msg); } if(mi->mouseData & XBUTTON2) { + QueueKeyStateTable[VK_XBUTTON2] |= 0xc0; Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON2); CurInfo->ButtonsDown |= XBUTTON2; MsqInsertSystemMessage(&Msg); @@ -1049,12 +1059,14 @@ IntMouseInput(MOUSEINPUT *mi) Msg.message = WM_XBUTTONUP; if(mi->mouseData & XBUTTON1) { + QueueKeyStateTable[VK_XBUTTON1] &= 0x80; Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON1); CurInfo->ButtonsDown &= ~XBUTTON1; MsqInsertSystemMessage(&Msg); } if(mi->mouseData & XBUTTON2) { + QueueKeyStateTable[VK_XBUTTON2] &= 0x80; Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON2); CurInfo->ButtonsDown &= ~XBUTTON2; MsqInsertSystemMessage(&Msg); diff --git a/reactos/subsys/win32k/ntuser/keyboard.c b/reactos/subsys/win32k/ntuser/keyboard.c index 6f454db29c0..9a6c1e2135b 100644 --- a/reactos/subsys/win32k/ntuser/keyboard.c +++ b/reactos/subsys/win32k/ntuser/keyboard.c @@ -331,6 +331,24 @@ NtUserGetKeyState( return ret; } +DWORD +STDCALL +NtUserGetAsyncKeyState( + DWORD key) +{ + DWORD ret = 0; + + IntLockQueueState; + if( key < 0x100 ) { + ret = ((DWORD)(QueueKeyStateTable[key] & KS_DOWN_BIT) << 8 ) | + (QueueKeyStateTable[key] & KS_LOCK_BIT); + } + IntUnLockQueueState; + return ret; +} + + + int STDCALL ToUnicodeEx( UINT wVirtKey, UINT wScanCode, PBYTE lpKeyState, diff --git a/reactos/subsys/win32k/ntuser/stubs.c b/reactos/subsys/win32k/ntuser/stubs.c index 884a4337b30..c0da114c1a1 100644 --- a/reactos/subsys/win32k/ntuser/stubs.c +++ b/reactos/subsys/win32k/ntuser/stubs.c @@ -283,16 +283,6 @@ NtUserGetAltTabInfo( return 0; } -DWORD -STDCALL -NtUserGetAsyncKeyState( - DWORD Unknown0) -{ - UNIMPLEMENTED - - return 0; -} - DWORD STDCALL NtUserGetComboBoxInfo(