2009-10-01 1 views
0

Получение активного приложения не является проблемой, у меня уже есть это.Как отправить нажатие клавиши «Cmd-C» активному приложению в объективе-c или сообщить программе выполнить операцию копирования?

Я хочу знать, как отправить комбинацию клавиш «Cmd-C» в активное приложение, чтобы он помещал выделенный текст в буфер обмена (общий картон).

Или еще лучше: как сообщить активному приложению выполнить операцию копирования без отправки нажатия клавиши или без выделения меню «Редактировать» при срабатывании операции копирования.

Я не могу использовать NSAppleScript (10.2), потому что этот конкретный класс должен быть как можно более совместим с предыдущим (до 10.0 в идеале).

Я посмотрел на NSAppleEvents (который, казалось бы, пошел), но не может найти способ сделать это. Конкретный ответ был бы очень желанным!

Заранее благодарен!

UPDATE:

Решение NSAppleScript Роб работает, но я по-прежнему заинтересованы в этом без необходимости NSAppleScript. Я попытался использовать CGPostKeyboardEvent (используя последнее логическое значение, чтобы установить ключ в состояние «вверх» или «вниз»), но я не могу найти коды клавиш или таблицы символов. Может ли кто-нибудь уточнить, как CGPostKeyboardEvent будет использоваться для ввода «c»? (таблица CGCharCode и CGKeyCode была бы идеальной).

ответ

5
+0

Спасибо за быстрый ответ, но ссылка на GCPostKeyboardEvent говорит, что этот метод устарел в 10.6 ... Я работаю над коммерческим продуктом, и мне нужно будущее решение. Обсуждение говорит, что CGEventCreateKeyboardEvent будет хорошим кандидатом на замещение, но он поддерживается только с 10.4 и выше ... есть ли другой способ сделать это? – Form

+5

@Form Я думаю, что способ обработки это условная компиляция. Используйте CGPostKeyboardEvent для <10.3 и CGEventCreateKeyboardEvent для> = 10.4 – Amok

+1

Поддержка отбрасывания Apple для SDK 10.6 является наименьшей из ваших проблем. Особенно вы пытаетесь настроить таргетинг до 10.4, что, я полагаю, будет 10.3.9, поскольку это самый ранний универсальный SDK. – Darren

2

Если вы можете включить системные события (доступ для вспомогательных устройств) на компьютере, вы можете отправить этот скрипт с NSAppleEvent [EDIT: на самом деле NSAppleScript] initWithSource:

tell application "System Events" to keystroke "c" using command down 

Я действительно не имеют какой-либо идея, когда были введены системные события.

+0

Это похоже на хорошее решение, хотя я думаю, что вы имели в виду NSAppleScript, а не NSAppleEvent. Я пытался это сделать, но пока скрипт работает в редакторе сценариев, он не работает в моем приложении ... Я слышу, что «текст не выбран, вы не можете копировать» звуковой сигнал, когда скрипт запускается в моем коде , Safari уделяет основное внимание, когда это происходит, поэтому я почти не знаю, что проблема ... – Form

+0

Вы правы в NSAppleScript. Извини за это. Звуковой сигнал означает, что системные события не включены. Он должен быть включен в Системные настройки-> Универсальный доступ-> Включить доступ для вспомогательных устройств. – Rob

+0

Вы также можете быть заинтересованы в этом, а затем: http://www.macosxhints.com/article.php?story=20060203225241914 – Rob