Implement NtUserGetAsyncKeyState and support for TrackMouseEvent.
Modified: trunk/reactos/subsys/win32k/ntuser/input.c
Modified: trunk/reactos/subsys/win32k/ntuser/keyboard.c
Modified: trunk/reactos/subsys/win32k/ntuser/stubs.c

Modified: trunk/reactos/subsys/win32k/ntuser/input.c
--- trunk/reactos/subsys/win32k/ntuser/input.c	2005-07-08 12:15:07 UTC (rev 16508)
+++ trunk/reactos/subsys/win32k/ntuser/input.c	2005-07-08 12:16:47 UTC (rev 16509)
@@ -35,6 +35,8 @@
 #define NDEBUG
 #include <debug.h>
 
+extern BYTE QueueKeyStateTable[];
+
 /* GLOBALS *******************************************************************/
 
 static HANDLE MouseDeviceHandle;
@@ -986,36 +988,42 @@
   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 @@
     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 @@
     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);

Modified: trunk/reactos/subsys/win32k/ntuser/keyboard.c
--- trunk/reactos/subsys/win32k/ntuser/keyboard.c	2005-07-08 12:15:07 UTC (rev 16508)
+++ trunk/reactos/subsys/win32k/ntuser/keyboard.c	2005-07-08 12:16:47 UTC (rev 16509)
@@ -331,6 +331,24 @@
   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,

Modified: trunk/reactos/subsys/win32k/ntuser/stubs.c
--- trunk/reactos/subsys/win32k/ntuser/stubs.c	2005-07-08 12:15:07 UTC (rev 16508)
+++ trunk/reactos/subsys/win32k/ntuser/stubs.c	2005-07-08 12:16:47 UTC (rev 16509)
@@ -285,16 +285,6 @@
 
 DWORD
 STDCALL
-NtUserGetAsyncKeyState(
-  DWORD Unknown0)
-{
-  UNIMPLEMENTED
-
-  return 0;
-}
-
-DWORD
-STDCALL
 NtUserGetComboBoxInfo(
   DWORD Unknown0,
   DWORD Unknown1)