2015-02-07 2 views
-3

Мне нужно написать приложение, которое нажимает на окна.Как отправить клик мыши?

Как отправить левую кнопку мыши на координату x/y экрана, где находится окно?

ответ

-1

Вы можете использовать mouse_event функцию, чтобы нажать на (х, у):

mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0); 
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0); 
+0

'mouse_event()' был заменен на '' SendInput() '] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310.aspx), вы должны использовать это вместо. Документация, на которую вы ссылались, даже говорит об этом. –

+0

@MustafaChelik Ваше решение всегда отправляет сообщения координатам курсора, а не x, y. – Ufx

2

Используйте 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,0, а не в x, y. – Ufx

+0

Второй и третий входные данные не включают флаг MOUSEEVENTF_ABSOLUTE, поэтому они относятся к позиции мыши, установленной первым входом. Это указано в документации: «Если значение MOUSEEVENTF_ABSOLUTE не указано, dx и dy указывают движение относительно предыдущего события мыши (последняя сообщенная позиция)». Итак, все нормально, что dx и dy равны 0 во втором и третьем входах. –

Смежные вопросы