Как использовать NSPasteboard для передачи данных между приложениями (используя контекстные меню)

Объекты NSPasteboard передают данные на сервер монтажного стола и с него. Сервер является общим для всех запущенных приложений. Он содержит данные, которые пользователь вырезал или скопировал, а также другие данные, которые одно приложение хочет передать другому. Объекты NSPasteboard являются единственным интерфейсом приложения к серверу и ко всем операциям монтажного стола.

Объект NSPasteboard также используется для передачи данных между приложениями и поставщиками услуг, указанными в меню «Службы» каждого приложения. Монтажная панель перетаскивания (NSDragPboard) используется для передачи данных, которые перетаскивает пользователь.

Я нашел это в документации NSPasteboard от Apple. Пока я знаю, как использовать монтажный стол только для простых целей копирования-вставки. Что меня интересует, так это то, как данные, не предназначенные для копирования и вставки, могут передаваться через монтажный сервер между приложениями с использованием контекстных меню вместо перетаскивания. Например, если пользователь щелкает правой кнопкой мыши слово и выбирает «Поиск в словаре» в контекстном меню, слово затем (предположительно) отправляется в приложение «Словарь» через монтажный стол.

Может ли кто-нибудь продемонстрировать приложение для проверки концепции, показывающее, как получить доступ к данным на монтажном сервере, где хранятся слова, для которых пользователь использовал «Поиск в словаре»?


person hollow7    schedule 13.11.2011    source источник


Ответы (1)


Нам не обязательно находить монтажный стол «Поиск в словаре». (если он есть). Но есть метод класса NSPasteboard, который подходит мне для этого использования, если вы хотите передавать данные через картон между вашими приложениями.

+ (NSPasteboard *)pasteboardWithName:(NSString *)name

Просто используйте одно и то же имя для обоих приложений, и вы сможете передавать данные между ними. Просто не забудьте вызвать - releaseGlobally на этом монтажном столе, когда закончите с ним.

person Alex Zielenski    schedule 13.11.2011
comment
Спасибо за ответ. ваш метод сработает, если оба приложения мои. но мне просто интересно... можно ли перехватить данные монтажного стола из другого приложения? Например, если я хочу создать общесистемную службу, которая отслеживает каждый раз, когда пользователь использует «Поиск в словаре» в любом приложении, как мне это сделать? - person hollow7; 13.11.2011
comment
Все, что вам нужно, это знать имя используемого монтажного стола, а затем вы можете опросить его -changeCount. - person Alex Zielenski; 13.11.2011