OSDN Git Service

mouse button event injected by SendInput() can't activate cmd.exe window on Vista...
[yamy/yamy.git] / engine.cpp
index 502fe74..31a6a70 100644 (file)
@@ -613,16 +613,30 @@ unsigned int Engine::injectInput(const KEYBOARD_INPUT_DATA *i_kid, const KBDLLHO
                Acquire a(&m_cskidq);\r
                INPUT kid[3];\r
                int i = 0;\r
-\r
-               if (m_dragging && !(i_kid->Flags & KEYBOARD_INPUT_DATA::BREAK)) {\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
+               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
@@ -689,8 +703,6 @@ unsigned int Engine::injectInput(const KEYBOARD_INPUT_DATA *i_kid, const KBDLLHO
                        break;\r
                }\r
                if (i == 1) {\r
-                       POINT pt;\r
-                       GetCursorPos(&pt);\r
                        i++;\r
                        kid[i].type = INPUT_MOUSE;\r
                        kid[i].mi.dx = 65535 * pt.x / GetSystemMetrics(SM_CXVIRTUALSCREEN);\r