Отправка команды "копировать" в какао
Есть ли способ отправить инструкцию copy (command-c) без использования cgEvent для имитации нажатий клавиш? У меня нет доступа к текстовому полю в приложении, из которого я хочу получить текст, поэтому необходимо выполнить репликацию вручную, копируя в буфер обмена, и, похоже, есть ошибка с отправкой cgevent.
Согласно документации Quartz, для ввода заглавной буквы Z необходимо использовать:
CGEventRef event1, event2, event3, event4;
event1 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)56, true);
event2 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, true);
event3 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, false);
event4 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)56, false);
Однако, если я присоединяю этот набор инструкций к NSTimer, он работает только при первом запуске. пример вывода:
ZzzZzzzzZZzzZ (против ожидаемого ZZZZZZZZZ).
Как еще можно отправить команду копирования в активное окно?
3 ответа
Вместо публикации событий необработанного ключа лучше использовать API-интерфейсы специальных возможностей, чтобы вызвать пункт "Копировать" в меню "Правка" другого приложения. Это, вероятно, будет более надежным.
Я не уверен, что понимаю связь между вашим кодом и кодом приложения. Вы делаете инъекцию или что-то? Есть ли причина, по которой вы не можете сделать: [[window firstResponder] copy:nil]
?
Опиши еще немного, что ты делаешь, пожалуйста.