INPUT inp[2];
memset(inp,0,sizeof(inp));
inp[0].mi.dx = 1653;
inp[0].mi.dy = 19;
inp[0].type=INPUT_MOUSE;
inp[0].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
inp[0].mi.dwFlags=MOUSEEVENTF_ABSOLUTE;
inp[1].mi.dx = 1653;
inp[1].mi.dy = 19;
inp[1].type=INPUT_MOUSE;
inp[1].mi.dwFlags=MOUSEEVENTF_LEFTUP;
inp[1].mi.dwFlags=MOUSEEVENTF_ABSOLUTE;
SendInput(2,inp,sizeof(INPUT));
Почему не работает код с функцией SendInput
Ниже приведенный код должен эту программу закрыть, но почему-то этого не происходит.
Код:
Тогда, как код
Код:
SetCursorPos(1653, 19);
Sleep(100);
mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 ); //нажимаем
Sleep(100);
mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ); //отп
Sleep(100);
Sleep(100);
mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 ); //нажимаем
Sleep(100);
mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ); //отп
Sleep(100);
делает все правильно.
Цитата: asmel
Код:
inp[0].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
inp[0].mi.dwFlags=MOUSEEVENTF_ABSOLUTE;
inp[0].mi.dwFlags=MOUSEEVENTF_ABSOLUTE;
Может быть,
Код:
inp[0].mi.dwFlags=MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN;
Как я понимаю, движение мыши и клик в одном действии SendInput не сочетается.
Код:
INPUT inp[3];
memset(inp,0,sizeof(inp));
inp[0].mi.dx = 62000;
inp[0].mi.dy = 700;
inp[0].type=INPUT_MOUSE;
inp[0].mi.dwFlags=MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
inp[1].mi.dx = 0;
inp[1].mi.dy = 0;
inp[1].type=INPUT_MOUSE;
inp[1].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
inp[2].mi.dx = 0;
inp[2].mi.dy = 0;
inp[2].type=INPUT_MOUSE;
inp[2].mi.dwFlags=MOUSEEVENTF_LEFTUP;
SendInput(3,inp,sizeof(INPUT));
memset(inp,0,sizeof(inp));
inp[0].mi.dx = 62000;
inp[0].mi.dy = 700;
inp[0].type=INPUT_MOUSE;
inp[0].mi.dwFlags=MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
inp[1].mi.dx = 0;
inp[1].mi.dy = 0;
inp[1].type=INPUT_MOUSE;
inp[1].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
inp[2].mi.dx = 0;
inp[2].mi.dy = 0;
inp[2].type=INPUT_MOUSE;
inp[2].mi.dwFlags=MOUSEEVENTF_LEFTUP;
SendInput(3,inp,sizeof(INPUT));
На всякий случай, два слова из MSDN про некоторые особенности работы SetCursorPos():[quote=MSDN]The cursor is a shared resource. A window should move the cursor only when the cursor is in the window's client area.
The input desktop must be the current desktop when you call SetCursorPos. Call OpenInputDesktop to determine whether the current desktop is the input desktop. If it is not, call SetThreadDesktop with the HDESK returned by OpenInputDesktop to switch to that desktop.[/quote]
Код:
inp[0].mi.dwFlags=MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN;
так и есть.
Цитата:
Как я понимаю, движение мыши и клик в одном действии SendInput не сочетается.
В данном случае сочетаются, я проверил. В выходные определил с помощью друзей, что проблема была с координатами точки, в которую посылается клик мышки.