Определить исходное приложение текущего содержимого монтажного стола

Некоторые менеджеры буфера обмена OSX из AppStore демонстрируют возможность определения приложения-источника содержимого, которое было скопировано в буфер обмена.

Я пишу простой наблюдатель за буфером обмена и хотел бы показать значок исходного приложения рядом с содержимым, хранящимся в общем NSPasteboard. И я хотел бы знать, как этого можно достичь.

Насколько я понимаю, NSPasteboard не предоставляет никакой дополнительной информации, кроме типов данных и самих данных.

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


person UJey    schedule 01.05.2013    source источник
comment
Несколько менеджеров буфера обмена OSX = CopyLess. Насколько я вижу, это единственное приложение, которое работает.   -  person UJey    schedule 02.05.2013
comment
Может быть, они как-то используют AppleScript?   -  person UJey    schedule 02.05.2013


Ответы (2)


Я считаю, что способ работы CopyLess и Alfred 2 (который также поддерживает это) заключается в том, что у них есть таймер, который проверяет буфер обмена на наличие изменений. Когда они видят изменение в буфере обмена, они получают активное приложение и связывают это приложение с изменением. Вероятно, это не надежный метод, но в большинстве случаев он должен работать.

person Dustin    schedule 01.05.2013
comment
Спасибо @Dustin. Я пришел к такому же выводу. - person UJey; 02.05.2013

Для этого теперь существует новый квазистандарт (по состоянию на декабрь 2016 г.), см. http://nspasteboard.org.

Это работает следующим образом:

  • По умолчанию программа, которая записывает содержимое буфера обмена, должна предполагать, что самым передним приложением является то, которое заполнило буфер обмена (что, по общему признанию, работает только в том случае, если программа уже запущена, когда содержимое буфера обмена установлено).

  • Но если есть разновидность (вид) буфера обмена типа org.nspasteboard.source, то содержимое этой разновидности должно быть идентификатором пакета приложения, которое заполнило буфер обмена.

(Это квазистандарт, поскольку он был обсужден и согласован заинтересованными участниками списка рассылки, управляемого nspasteboard.org)

person Thomas Tempelmann    schedule 04.01.2017
comment
Кто-нибудь, покажите это разработчикам 1Password :) Я имею в виду org.nspasteboard.source для их агента меню. - person UJey; 05.01.2017
comment
Разработчики 1pw находятся в указанном списке рассылки. Кто-то просто должен убедить их внедрить новый протокол. - person Thomas Tempelmann; 08.01.2017