有没有办法检查应用程序将接受哪些粘贴板项目?

时间:2015-01-30 20:58:25

标签: macos nspasteboard

根据我对粘贴板工作原理的理解,当发出粘贴请求时,请求者还会指出它允许的数据类型。有没有办法在发出粘贴请求之前获取有关应用程序的信息?

2 个答案:

答案 0 :(得分:1)

不,您无法获得有关应用程序可以处理的粘贴板类型的信息。

正在执行粘贴操作的应用程序并不能准确地告诉系统它接受哪种数据类型。它根据某些类型过滤它接收的数据类型列表。但是,它可以使用动态信息执行此操作,并且每次都可以使用不同的数据类型集进行多次过滤。

粘贴板的API非常灵活。有一些高级方法,应用程序提供了一个类型(或可能是类)列表,它可以处理并获取相关项(或对象)。但是,还有一些低级方法,应用程序可以通过这些方法枚举所有项目及其类型,并根据其喜欢的逻辑选择一个。它可能永远不会将类型/类列表传递到框架中。即使它确实将类型/类的列表传递到框架中,它也会在内部处理到应用程序。它没有与更广泛的系统共享,因为没有理由。而且,如前所述,它可以是动态列表。

答案 1 :(得分:0)

检查NSPasteboardReading和NSPasteboardWriting协议文档。

  

// writableTypesForPasteboard: - 返回接收者可以写入的UTI数据类型字符串数组   到给定的粘贴板

- (NSArray *)writableTypesForPasteboard:(NSPasteboard *)pasteboard
  

// readableTypesForPasteboard: - 返回接收者可以读取的UTI数据类型字符串数组   来自粘贴板并从

初始化
+ (NSArray *)readableTypesForPasteboard:(NSPasteboard *)pasteboard

如果您需要更多详细信息,我建议您阅读“粘贴板编程指南”:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PasteboardGuide106/Introduction/Introduction.html