Я читал о NSPasteBoard
в документации Apple, и как благодаря этому приложения вписали PasteBoard
и позвольте другим приложениям читать тот текст и использовать его.
Мог кто-то говорить мне, как вставить текст от, приложение (который находится в строке состояния) в a NSTextField
это в другом приложении.
То, что я пытаюсь сделать, является чем-то подобным, что делают Отрывок и SnippetsApp.
Если я абсолютно глуп и пропустил очевидное в Документах Apple, могли Вы указывать на меня на правильный путь :)
Спасибо!
Кто-нибудь может сказать мне, как вставить текст из приложения (которое находится в строке состояния) в поле NSTextField, находящееся внутри другого приложения.
Вставка - это то, что происходит в принимающем приложении. Запись на монтажный стол - это копирование.
Кроме того, вы не можете предположить, что пользователь захочет вставить данные в NSTextField. Это может быть NSTextView или текстовое поле в WebView, или элемент управления Carbon EditText или MLTE, или какой-либо другой текстовый редактор, такой как текстовый редактор Qt или wxWidgets. Они могут даже использовать приложение со списком, которое позволяет им вставлять текст прямо в него.
Итак, не существует программного способа напрямую сказать приложению: «Вот текст - вставьте его, пожалуйста». Вы должны скопировать его на общий монтажный стол, а затем создать событие, которое обычно должно вызывать вставку самого переднего приложения. Предложение Чарли относительно ⌘V - односторонний, хотя и хитрый; раскладка Дворака помещает V на другую клавишу, в то время как раскладка «Дворак QWERTY ⌘» помещает V-with-⌘ (в отличие от V-без-⌘) на ту же клавишу, что и V.
Чтобы создать это событие ⌘V , загляните в CGEventTap . Вам нужно будет использовать функцию CGEventCreateKeyboardEvent
для создания самого события, а поскольку эта функция принимает код клавиши, вам нужно найти правильный код клавиши для V часть комбинации V, для которой потребуется пройти через Службы источника ввода текста или Службы раскладки клавиатуры , в зависимости от раскладки.
На этом этапе вы можете подумать об использовании специальных возможностей, чтобы найти пункт меню «Вставить» в меню «Правка» и отправить ему сообщение AXPress, но «Вставить» и «Изменить» - это всего лишь английские слова для обозначения этих понятий; если вы это сделаете, ваше приложение не будет работать на любом другом языке. Вы можете перейти по порядку (третье меню, шестой пункт меню), но тогда ваше приложение не будет работать в приложениях без меню «Файл», без пункта меню «Повторить» или с двумя элементами меню «Отменить» (Photoshop). Формирование V-события - это действительно правильный путь.
Обычно единственный способ - написать это на NSPasteboard, а затем переключитесь на другое приложение и используйте некоторые функции Carbon, чтобы нажать "Command-V" ...