gpt4 book ai didi

macos - 列出 macOS 上的所有 NSPasteBoard 名称

转载 作者:行者123 更新时间:2023-12-03 16:53:42 36 4
gpt4 key购买 nike

有没有办法获取当前系统上所有 NSPasteBoard 及其名称的列表?

我想知道是否有一些可用的函数(即使是私有(private) API)来实现这一点。谢谢!

最佳答案

不,即使使用私有(private) API,也没有函数可以执行此操作。

pboard 程序 ( /usr/libexec/pboard ) 作为守护进程运行并管理所有共享的粘贴板。 NSPasteboard类使用 XPC 与 pboard 守护进程对话,因此要获取所有粘贴板的列表,pboard 需要通过响应粘贴板名称列表来处理一些 XPC 消息。

pboard程序非常简单:它初始化各种东西(日志、沙箱、调度队列、mach服务),然后调用__CFPasteboardStartServicingConnection ,它实际上是在 CoreFoundation 框架中定义的。该函数最终通过调用_CFHandlePasteboardXPCEvent来处理每个传入的XPC请求。 .

查看_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,这需要启动您的恢复分区。)

关于macos - 列出 macOS 上的所有 NSPasteBoard 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53639036/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com