Я пишу приложение для Mac OS X 10.6 и позже в C++. Одна часть приложения должна моделировать движение мыши и щелчки мышью. Я в настоящее время делаю это путем регистрации CGEvent
использование объектов CGEventPost(kCGHIDEventTap, event);
.
Это работает, по большей части - я могу моделировать движение мыши и щелчки очень хорошо, но это, кажется, перестало работать в некоторых областях. Например:
CGEventCreateMouseEvent(...)
заставляет событие работать в веб-браузере.Это несоответствие приезжает границы приложения. Какова могла бы быть причина?
Чтобы убедить эти приложения в том, что вы действительно сгенерировали щелчок, вам нужно явно установить значение поля "состояние щелчка" для события "мышь вверх" в 1 (по умолчанию оно равно 0). Это можно сделать следующим образом:
CGEventSetIntegerValueField(event, kCGMouseEventClickState, 1);
Также нужно установить значение 1 для события опускания мыши, но благодаря использованию CGEventCreateMouseEvent(), а не CGEventCreate() это будет сделано за вас.
Я протестировал это, и это работает в кнопках 'i' на приборной панели и в результатах поиска Spotlight.
(В качестве дополнения, если бы вы имитировали двойной щелчок, вам нужно было бы установить состояние щелчка на 2 для событий "вниз" и "вверх" второго щелчка)
.Используйте OSXVnc. Я вижу, что они используют CGPostMouseEvent()
вместо CGPostEvent()
.
Большинство меню активируются с помощью события mouseDown. Гиперссылки следуют после события mouseUp. Кнопка «i» работает только тогда, когда была нажата мышь, но не очень долго. Все это, кажется, показывает, что у вас проблема с синхронизацией, попробуйте несколько нажатий на время.
Я написал, как это сделать, в сообщении блога Python Mouse Click and Move Mouse в Apple Mac OS X Snow Leopard 10.6.x .