OSDN Git Service

combine correction of pointer postion during drag and following bottun down event
authorU-i7\gimy <gimy@users.sourceforge.jp>
Thu, 23 Jul 2009 15:03:05 +0000 (00:03 +0900)
committerU-i7\gimy <gimy@users.sourceforge.jp>
Thu, 23 Jul 2009 15:03:05 +0000 (00:03 +0900)
engine.cpp

index 31a6a70..d8fba76 100644 (file)
@@ -611,108 +611,103 @@ unsigned int Engine::injectInput(const KEYBOARD_INPUT_DATA *i_kid, const KBDLLHO
 {\r
        if (i_kid->Flags & KEYBOARD_INPUT_DATA::E1) {\r
                Acquire a(&m_cskidq);\r
-               INPUT kid[3];\r
-               int i = 0;\r
-               POINT pt;\r
-               GetCursorPos(&pt);\r
-\r
-               if (!(i_kid->Flags & KEYBOARD_INPUT_DATA::BREAK) &&\r
-                       i_kid->MakeCode != 4 && i_kid->MakeCode != 5) {\r
-                       HWND hwnd = WindowFromPoint(pt);\r
-                       if (hwnd != NULL) {\r
-                               _TCHAR className[GANA_MAX_ATOM_LENGTH];\r
-                               if (GetClassName(hwnd, className, NUMBER_OF(className))) {\r
-                                       if (_tcsicmp(className, _T("ConsoleWindowClass")) == 0) {\r
-                                               SetForegroundWindow(hwnd);\r
-                                       }\r
-                               }\r
-                       }\r
-                       if (m_dragging) {\r
-                               kid[i].type = INPUT_MOUSE;\r
-                               kid[i].mi.dx = 65535 * m_msllHookCurrent.pt.x / GetSystemMetrics(SM_CXVIRTUALSCREEN);\r
-                               kid[i].mi.dy = 65535 * m_msllHookCurrent.pt.y / GetSystemMetrics(SM_CYVIRTUALSCREEN);\r
-                               kid[i].mi.time = 0;\r
-                               kid[i].mi.mouseData = 0;\r
-                               kid[i].mi.dwExtraInfo = 0;\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK;\r
-                               i++;\r
-                       }\r
-               }\r
-               kid[i].type = INPUT_MOUSE;\r
-               kid[i].mi.dx = 0;\r
-               kid[i].mi.dy = 0;\r
-               kid[i].mi.time = 0;\r
-               kid[i].mi.mouseData = 0;\r
-               kid[i].mi.dwExtraInfo = 0;\r
+               INPUT kid[2];\r
+               int count = 1;\r
+\r
+               kid[0].type = INPUT_MOUSE;\r
+               kid[0].mi.dx = 0;\r
+               kid[0].mi.dy = 0;\r
+               kid[0].mi.time = 0;\r
+               kid[0].mi.mouseData = 0;\r
+               kid[0].mi.dwExtraInfo = 0;\r
                switch (i_kid->MakeCode) {\r
                case 1:\r
                        if (i_kid->Flags & KEYBOARD_INPUT_DATA::BREAK) {\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_LEFTUP;\r
+                               kid[0].mi.dwFlags = MOUSEEVENTF_LEFTUP;\r
                        } else {\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;\r
+                               kid[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;\r
                        }\r
                        break;\r
                case 2:\r
                        if (i_kid->Flags & KEYBOARD_INPUT_DATA::BREAK) {\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_RIGHTUP;\r
+                               kid[0].mi.dwFlags = MOUSEEVENTF_RIGHTUP;\r
                        } else {\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;\r
+                               kid[0].mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;\r
                        }\r
                        break;\r
                case 3:\r
                        if (i_kid->Flags & KEYBOARD_INPUT_DATA::BREAK) {\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_MIDDLEUP;\r
+                               kid[0].mi.dwFlags = MOUSEEVENTF_MIDDLEUP;\r
                        } else {\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_MIDDLEDOWN;\r
+                               kid[0].mi.dwFlags = MOUSEEVENTF_MIDDLEDOWN;\r
                        }\r
                        break;\r
                case 4:\r
                        if (i_kid->Flags & KEYBOARD_INPUT_DATA::BREAK) {\r
                                return 1;\r
                        } else {\r
-                               kid[i].mi.mouseData = WHEEL_DELTA;\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_WHEEL;\r
+                               kid[0].mi.mouseData = WHEEL_DELTA;\r
+                               kid[0].mi.dwFlags = MOUSEEVENTF_WHEEL;\r
                        }\r
                        break;\r
                case 5:\r
                        if (i_kid->Flags & KEYBOARD_INPUT_DATA::BREAK) {\r
                                return 1;\r
                        } else {\r
-                               kid[i].mi.mouseData = -WHEEL_DELTA;\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_WHEEL;\r
+                               kid[0].mi.mouseData = -WHEEL_DELTA;\r
+                               kid[0].mi.dwFlags = MOUSEEVENTF_WHEEL;\r
                        }\r
                        break;\r
                case 6:\r
-                       kid[i].mi.mouseData = XBUTTON1;\r
+                       kid[0].mi.mouseData = XBUTTON1;\r
                        if (i_kid->Flags & KEYBOARD_INPUT_DATA::BREAK) {\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_XUP;\r
+                               kid[0].mi.dwFlags = MOUSEEVENTF_XUP;\r
                        } else {\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_XDOWN;\r
+                               kid[0].mi.dwFlags = MOUSEEVENTF_XDOWN;\r
                        }\r
                        break;\r
                case 7:\r
-                       kid[i].mi.mouseData = XBUTTON2;\r
+                       kid[0].mi.mouseData = XBUTTON2;\r
                        if (i_kid->Flags & KEYBOARD_INPUT_DATA::BREAK) {\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_XUP;\r
+                               kid[0].mi.dwFlags = MOUSEEVENTF_XUP;\r
                        } else {\r
-                               kid[i].mi.dwFlags = MOUSEEVENTF_XDOWN;\r
+                               kid[0].mi.dwFlags = MOUSEEVENTF_XDOWN;\r
                        }\r
                        break;\r
                default:\r
                        return 1;\r
                        break;\r
                }\r
-               if (i == 1) {\r
-                       i++;\r
-                       kid[i].type = INPUT_MOUSE;\r
-                       kid[i].mi.dx = 65535 * pt.x / GetSystemMetrics(SM_CXVIRTUALSCREEN);\r
-                       kid[i].mi.dy = 65535 * pt.y / GetSystemMetrics(SM_CYVIRTUALSCREEN);\r
-                       kid[i].mi.time = 0;\r
-                       kid[i].mi.mouseData = 0;\r
-                       kid[i].mi.dwExtraInfo = 0;\r
-                       kid[i].mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK;\r
+               if (!(i_kid->Flags & KEYBOARD_INPUT_DATA::BREAK) &&\r
+                       i_kid->MakeCode != 4 && i_kid->MakeCode != 5) {\r
+                       HWND hwnd;\r
+                       POINT pt;\r
+\r
+                       if (GetCursorPos(&pt) && (hwnd = WindowFromPoint(pt))) {\r
+                               _TCHAR className[GANA_MAX_ATOM_LENGTH];\r
+                               if (GetClassName(hwnd, className, NUMBER_OF(className))) {\r
+                                       if (_tcsicmp(className, _T("ConsoleWindowClass")) == 0) {\r
+                                               SetForegroundWindow(hwnd);\r
+                                       }\r
+                               }\r
+                       }\r
+                       if (m_dragging) {\r
+                               kid[0].mi.dx = 65535 * m_msllHookCurrent.pt.x / GetSystemMetrics(SM_CXVIRTUALSCREEN);\r
+                               kid[0].mi.dy = 65535 * m_msllHookCurrent.pt.y / GetSystemMetrics(SM_CYVIRTUALSCREEN);\r
+                               kid[0].mi.dwFlags |= MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK;\r
+\r
+                               kid[1].type = INPUT_MOUSE;\r
+                               kid[1].mi.dx = 65535 * pt.x / GetSystemMetrics(SM_CXVIRTUALSCREEN);\r
+                               kid[1].mi.dy = 65535 * pt.y / GetSystemMetrics(SM_CYVIRTUALSCREEN);\r
+                               kid[1].mi.time = 0;\r
+                               kid[1].mi.mouseData = 0;\r
+                               kid[1].mi.dwExtraInfo = 0;\r
+                               kid[1].mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK;\r
+\r
+                               count = 2;\r
+                       }\r
                }\r
-               SendInput(i + 1, &kid[0], sizeof(kid[0]));\r
+               SendInput(count, &kid[0], sizeof(kid[0]));\r
        } else {\r
                INPUT kid;\r
 \r