首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSPasteboard数据启动应用程序

使用NSPasteboard数据启动应用程序
EN

Stack Overflow用户
提问于 2012-11-09 21:44:35
回答 1查看 204关注 0票数 1

我想使用NSPasteboard数据启动应用程序(或使用AppleEvents发送给它们),就像在查找器中一样,当您将文件、文本、图像拖放到应用程序(或在Dock中)时,查找器会启动或调用应用程序中的数据。

像LSOpenFromURLSpec这样的启动服务功能只对文件起作用,我看到有一个AppleEvents的任意参数的选项,但我不知道如何让它起作用。

另一个问题是沙箱,但我还不确定它是否可行。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-10 02:51:55

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

  • 一个或多个文件

向应用程序发送一个或多个打开的文档Apple事件。在尝试文档方案或多个URL(不是controller.

  • One : NSApplication )之前,方案尝试向其应用代理发送至少一条消息(实际上应该只有一条,但这在几个版本中已被破坏)

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

  • 任何其他数据

你需要使用implement a service。哪个服务将用于Dock drops是根据类型自动检测的,我不知道它是如何在多个匹配中选择的;没有办法指定只有某些服务可用于Dock。关于NSPasteboard,您猜对了:您使用粘贴板为I/O实现服务。

当你是发送者时:

  • 发送文件

最简单的方法是使用Launch Services。这将在您的behalf.

  • Sending URL上发送相应的苹果事件

同样,Launch Services将为您发送必要的Apple事件。实际上,在现代代码中,您可能会对文件和非文件URLs.

  • Sending任何其他数据使用相同的LSOpen API

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

困难的部分是发现:你需要知道你想要执行哪个服务,并且它需要是可用的。我假设您知道将发送到哪个应用程序(模拟drop到哪个应用程序上),这对大多数打算发送到服务的人来说是一个助力。我敢肯定,您只需查看目标应用程序的Info.plist,然后找到与您自己的类型最匹配的服务。

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

你可能想要对此进行file a Radar

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13309244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档