gpt4 book ai didi

cocoa - 使用 NSPasteboard 数据启动应用程序

转载 作者:行者123 更新时间:2023-12-03 17:04:40 25 4
gpt4 key购买 nike

我想使用 NSPasteboard 数据启动应用程序(或使用 AppleEvents 发送给它们),就像在 Finder 中将文件、文本、图像拖放到应用程序(或 Dock 中)并启动时所做的那样或调用应用程序中的数据。

诸如 LSOpenFromURLSpec 之类的启动服务功能仅适用于文件,我看到有一个 AppleEvents 任意参数的选项,但我不知道如何实现此功能。

另一个问题是沙盒化,但我不确定它是否可能。

谢谢。

最佳答案

当您是接收者时,会发生什么取决于用户丢弃的内容:

  • 一个或多个文件

    向应用程序发送一个或多个开放文档 Apple 事件。在尝试文档 Controller 之前,NSApplication 会尝试向其应用程序委托(delegate)发送至少一条(实际上应该只有一条,但这在几个版本中已被破坏)消息。

  • 一个或多个 URL(不是文件:方案)

    向应用程序发送一个或多个 get-URL 事件。您需要为此实现一个 Apple 事件处理程序。方便起见,这就是示例 the Apple Event handling documentation用途。

  • 任何其他数据

    您需要implement a service 。 Dock drop 将使用哪个服务是根据类型自动检测的,我不知道它如何在多个匹配中进行选择;无法仅指定 Dock 可用的某些服务。您对 NSPasteboard 的猜测是正确的:您使用 I/O 粘贴板实现服务。

<小时/>

当您是发件人时:

  • 发送文件

    最简单的方法是使用启动服务。这将代表您发送适当的 Apple 事件。

  • 发送网址

    同样,启动服务将为您发送必要的 Apple 事件。事实上,在现代代码中,您可能会对文件和非文件 URL 使用相同的 LSOpen API。

  • 发送任何其他数据

    由于接收应用程序必须实现服务,因此您也必须perform a service .

    困难的部分是发现:您需要知道要执行哪个服务,并且它需要可用。我假设您知道您将发送到哪个应用程序(模拟转换),这对大多数打算发送到服务的人来说是一个优势。我很确定您只需查看目标应用程序的 Info.plist 并找到最适合您自己的类型的服务。

    一个潜在的问题是您无法指定应用程序包。您必须希望目标应用程序的服务能够显示在“服务”菜单中,并且您必须自己找出正确的菜单项名称。 (对您自己的“服务”菜单中显示的内容进行实验,尝试得出对应关系。)即使您提供了正确的服务项目名称并且启用了该服务,也不能保证该服务将由应用程序中的应用程序执行。您正在查看的 bundle - 它可能是不同的版本,甚至(可能,取决于名称的构造方式)具有相同名称的服务的不同应用程序。

    您可能想要file a Radar关于这个。

关于cocoa - 使用 NSPasteboard 数据启动应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13309244/

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