Нет, для этого нет функции, даже с частным API.
Программа pboard (/usr/libexec/pboard
) работает как демон и управляет всеми общими монтажными панелями.Класс NSPasteboard
общается с демоном pboard с помощью XPC, поэтому для получения списка всех монтажных панелей pboard должен обработать некоторое сообщение XPC, отвечая списком имен монтажных панелей.
Программа pboard оченьпросто: он инициализирует различные вещи (журналы, песочницу, очередь отправки, службу mach) и затем вызывает __CFPasteboardStartServicingConnection
, что фактически определено в платформе CoreFoundation.В конечном итоге эта функция обрабатывает каждый входящий XPC-запрос, вызывая _CFHandlePasteboardXPCEvent
.
Глядя на _CFHandlePasteboardXPCEvent
в дизассемблере (я использовал Hopper), мы можем увидеть полный список запросов, поддерживаемых pboard:
com.apple.pboard.create
com.apple.pboard.get-counts
com.apple.pboard.barrier
com.apple.pboard.begin-generation
com.apple.pboard.has-entries
com.apple.pboard.register-entries
com.apple.pboard.request-data
com.apple.pboard.refresh-cache
com.apple.pboard.release
com.apple.pboard.unique-promise-file
com.apple.pboard.resolve-all-promises
com.apple.pboard.resolve-pboard-promises
com.apple.pboard.set-data-flags
com.apple.pboard.make-generation-local
Ни у одного из них нет такого очевидного названия, как com.apple.pboard.get-pboard-names
.Если посмотреть на то, как они обрабатываются, первое, что делают почти все из них, - это получить имя монтажной панели из события и найти или создать монтажную панель с этим именем.
Единственный запрос, который я обнаружил, этоне требует немедленного поиска монтажной панели по имени com.apple.pboard.resolve-all-promises
, которая фактически отправляет интригующее сообщение +[_CFPasteboardStore copyAllPasteboards]
.Однако, насколько я могу судить, он не отправляет результат или фактически какой-либо результат обратно клиенту.И это единственное использование селектора copyAllPasteboards
в CoreFoundation.
Таким образом, если вы не подключитесь к демону pboard с помощью отладчика и не покопаетесь, вы не найдете список всех существующих монтажных панелей.(Для подключения к pboard с помощью отладчика необходимо сначала отключить SIP, что требует загрузки раздела восстановления.)