Мне нужно написать приложение, которое нажимает на окна.Как отправить клик мыши?
Как отправить левую кнопку мыши на координату x/y экрана, где находится окно?
Мне нужно написать приложение, которое нажимает на окна.Как отправить клик мыши?
Как отправить левую кнопку мыши на координату x/y экрана, где находится окно?
Вы можете использовать mouse_event функцию, чтобы нажать на (х, у):
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
Используйте SendInput() функции:
INPUT Inputs[3] = {0};
Inputs[0].type = INPUT_MOUSE;
Inputs[0].mi.dx = ...; // desired X coordinate
Inputs[0].mi.dy = ...; // desired Y coordinate
Inputs[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
Inputs[1].type = INPUT_MOUSE;
Inputs[1].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
Inputs[2].type = INPUT_MOUSE;
Inputs[2].mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(3, Inputs, sizeof(INPUT));
Обязательно прочитайте комментарии в MOUSEINPUT
documentation о том, как указать dx
и dy
правильно при использовании MOUSEEVENTF_ABSOLUTE
в среде с несколькими мониторами.
ваше решение всегда отправляет сообщение в 0,0, а не в x, y. – Ufx
Второй и третий входные данные не включают флаг MOUSEEVENTF_ABSOLUTE, поэтому они относятся к позиции мыши, установленной первым входом. Это указано в документации: «Если значение MOUSEEVENTF_ABSOLUTE не указано, dx и dy указывают движение относительно предыдущего события мыши (последняя сообщенная позиция)». Итак, все нормально, что dx и dy равны 0 во втором и третьем входах. –
'mouse_event()' был заменен на '' SendInput() '] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310.aspx), вы должны использовать это вместо. Документация, на которую вы ссылались, даже говорит об этом. –
@MustafaChelik Ваше решение всегда отправляет сообщения координатам курсора, а не x, y. – Ufx