У меня возникли проблемы при попытке программного перемещения мыши в macOS Sierra с помощью Quartz Event Services в среде Python.
Например:
Когда я запускаю этот скрипт:
from Quartz.CoreGraphics import CGEventCreateMouseEvent
from Quartz.CoreGraphics import CGEventPost
from Quartz.CoreGraphics import kCGMouseButtonLeft
from Quartz.CoreGraphics import kCGEventMouseMoved
from Quartz.CoreGraphics import kCGHIDEventTap
def MouseMove(x, y):
event = CGEventCreateMouseEvent(None, kCGEventMouseMoved, (x, y), kCGMouseButtonLeft)
CGEventPost(kCGHIDEventTap, event)
MouseMove(100, 100)
Все работает отлично, и мышь перемещается на (x: 100, y: 100)
.
ОДНАКО по какой-то причине эта процедура не перемещает мышь в некоторых приложениях. В частности, в моем случае мой MacBook работает под управлением Call of Duty: Modern Warfare 2 на Steam и перемещение мыши таким образом не регистрируется в этом приложении, но, что интересно, я все еще могу сгенерировать мышь щелкает в приложении, используя CGEventPost
, но не движения мыши.
Итак, я провел небольшое исследование, чтобы попытаться выяснить, почему это происходит, и самое близкое, что я смог найти в Интернете, касающееся моей проблемы, - это этот вопрос на SO, и я упоминаю об этом потому, что мне интересно, нравится ли это в связанном вопросе Мне нужно вызвать метод, похожий на что-то вроде CGEventSetIntegerValueField
, только вместо обновления kCGMouseEventClickState
update события мыши, относящегося к движению мыши, чтобы приложение знало, что мышь действительно переместилась. Однако я не нашел такого метода в документации CGEventField, и я просто чувствую, что я что-то упускаю, или, может быть, это даже не связано с проблемой, но это единственное зацепление, которое я смог найти.
Пожалуйста помоги. Буду признателен за любые предложения.