win32: перемещение мыши с помощью SetCursorPos против mouse_event - PullRequest
3 голосов
/ 15 сентября 2010

Есть ли разница между перемещением мыши в окнах с использованием следующих двух методов?

win32api.SetCursorPos((x,y))

против

nx = x*65535/win32api.GetSystemMetrics(0)
ny = y*65535/win32api.GetSystemMetrics(1)
win32api.mouse_event(win32con.MOUSEEVENTF_ABSOLUTE|win32con.MOUSEEVENTF_MOVE,nx,ny)

Что-то происходит по-другому в том, как Windows обрабатывает движения?

1 Ответ

4 голосов
/ 15 сентября 2010

Я считаю, что mouse_event работает путем вставки событий во входной поток мыши, где SetCursorPos просто перемещает курсор по экрану. Я не верю, что SetCursorPos также генерирует какие-либо входные события (хотя я могу ошибаться).

Практическое значение заключается в том, что когда вы используете SetCursorPos, он просто перемещает курсор вокруг. Где, когда вы используете mouse_event, он вставляет события во входной поток, который, в свою очередь, будет генерировать входные события для любых программ, которые слушают. Это имеет значение для программ, которые прослушивают события мыши более низкого уровня, а не просто щелчки курсора; игры например. Кроме того, если вы используете mouse_event для перемещения курсора и включения ускорения курсора / указателя, то результирующее движение мыши должно зависеть от того, какие окна кривых ускорения используются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...