tam*_*een 1 macos cocoa nspasteboard
有没有办法获得当前系统上所有 NSPasteBoard 及其名称的列表?
我想知道是否有一些可用的功能(即使是私有 API)来实现这一点。谢谢!
不,即使使用私有 API,也没有执行此操作的功能。
pboard 程序 ( /usr/libexec/pboard) 作为守护程序运行并管理所有共享的粘贴板。这NSPasteboard级会谈到pboard守护使用XPC,因此要获得所有pasteboards的列表,pboard需要用纸板名列表响应处理一些XPC消息。
pboard 程序很简单:初始化各种东西(日志、沙箱、调度队列、mach 服务)然后调用 __CFPasteboardStartServicingConnection,其实是在 CoreFoundation 框架中定义的。该函数最终通过调用来处理每个传入的 XPC 请求_CFHandlePasteboardXPCEvent。
看着_CFHandlePasteboardXPCEvent在反汇编(我用料斗),我们可以看到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
Run Code Online (Sandbox Code Playgroud)
这些都没有像com.apple.pboard.get-pboard-names. 看看它们的处理方式,几乎所有人所做的第一件事就是从事件中获取粘贴板名称,然后查找或创建具有该名称的粘贴板。
我发现的唯一一个不立即涉及按名称查找粘贴板的请求是com.apple.pboard.resolve-all-promises,它实际上发送了有趣的消息+[_CFPasteboardStore copyAllPasteboards]。但是,据我所知,它不会将结果或实际上任何结果发送回客户端。这是copyAllPasteboardsCoreFoundation 中选择器的唯一用途。
因此,除非您使用调试器附加到 pboard 守护程序并四处查看,否则您将找不到所有现有粘贴板的列表。(使用调试器连接到 pboard 需要首先禁用 SIP,这需要启动您的恢复分区。)
| 归档时间: |
|
| 查看次数: |
256 次 |
| 最近记录: |