Отправка команды "копировать" в какао

Есть ли способ отправить инструкцию 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]?

Опиши еще немного, что ты делаешь, пожалуйста.

Другие вопросы по тегам