右键单击文本并选择服务如何工作?
How does right-clicking text and selecting a service work?
[1] 当我 select 并右键单击任何应用程序中的任何文本时,我会看到一个 Services
菜单,我可以在其中单击以调用任何服务,例如 Search With Google
。
单击后,NSPasteboard
对象会自动发送到包含 selected 文本的服务。
[2] 第 3 方应用程序可以使用 BOOL NSPerformService ( NSString *itemName, NSPasteboard *pboard )
函数以编程方式调用任何服务。
此处应用程序必须设置 NSPasteboard
发送到服务的对象。
有没有办法以编程方式调用任何服务,但不设置 NSPasteboard
对象(NSPasteboard
对象应该像 [1] 中一样自动包含 selected 文本) ?
包含 selected 文本的 NSPasteboard
对象如何通过 [1] 中的 OS X 发送到服务?有没有私人的API?
这在 Services Implementation Guide, in particular the Using Services 章中有记录。
首先,当用户打开服务菜单时,Cocoa 调用响应链中的对象 -validRequestorForSendType:returnType:
以确定可以处理哪些发送类型和 return 类型的组合根据哪个对象(如果有)基于其当前状态(例如当前选择)。控制启用哪些服务菜单项。
当用户选择一个服务菜单项时,Cocoa 创建一个粘贴板并在 -validRequestorForSendType:returnType:
编辑的 return 请求者对象上调用 -writeSelectionToPasteboard:types:
。该对象应以其支持的任何类型将选择数据放在提供的粘贴板上。
Cocoa 然后将粘贴板传递给系统。系统在服务提供者进程中与Cocoa通信。 Cocoa 在该进程中的服务提供者对象上调用 -<messageName>:userData:error:
,其中 <messageName>
来自该应用的 Info.plist 文件中的服务描述。服务提供商对象是使用 NSRegisterServicesProvider()
.
在 Cocoa 注册的任何应用程序
服务提供商处理来自粘贴板的输入数据(如果有)并将 return 数据(如果有)存储到它。
提供者完成后,原始应用程序中的 Cocoa 在请求者对象上调用 -readSelectionFromPasteboard:
。同样,将粘贴板提供给该方法。
[1] 当我 select 并右键单击任何应用程序中的任何文本时,我会看到一个 Services
菜单,我可以在其中单击以调用任何服务,例如 Search With Google
。
单击后,NSPasteboard
对象会自动发送到包含 selected 文本的服务。
[2] 第 3 方应用程序可以使用 BOOL NSPerformService ( NSString *itemName, NSPasteboard *pboard )
函数以编程方式调用任何服务。
此处应用程序必须设置 NSPasteboard
发送到服务的对象。
有没有办法以编程方式调用任何服务,但不设置 NSPasteboard
对象(NSPasteboard
对象应该像 [1] 中一样自动包含 selected 文本) ?
包含 selected 文本的 NSPasteboard
对象如何通过 [1] 中的 OS X 发送到服务?有没有私人的API?
这在 Services Implementation Guide, in particular the Using Services 章中有记录。
首先,当用户打开服务菜单时,Cocoa 调用响应链中的对象 -validRequestorForSendType:returnType:
以确定可以处理哪些发送类型和 return 类型的组合根据哪个对象(如果有)基于其当前状态(例如当前选择)。控制启用哪些服务菜单项。
当用户选择一个服务菜单项时,Cocoa 创建一个粘贴板并在 -validRequestorForSendType:returnType:
编辑的 return 请求者对象上调用 -writeSelectionToPasteboard:types:
。该对象应以其支持的任何类型将选择数据放在提供的粘贴板上。
Cocoa 然后将粘贴板传递给系统。系统在服务提供者进程中与Cocoa通信。 Cocoa 在该进程中的服务提供者对象上调用 -<messageName>:userData:error:
,其中 <messageName>
来自该应用的 Info.plist 文件中的服务描述。服务提供商对象是使用 NSRegisterServicesProvider()
.
服务提供商处理来自粘贴板的输入数据(如果有)并将 return 数据(如果有)存储到它。
提供者完成后,原始应用程序中的 Cocoa 在请求者对象上调用 -readSelectionFromPasteboard:
。同样,将粘贴板提供给该方法。