2

对于我正在编写的应用程序,我需要访问一些其他应用程序的项目,Applescript 似乎是最好的方法。我一直在使用 Appscript 框架,它运行良好,因为它允许我线程化它并且不会在 Applescript 需要一段时间时让我的应用程序锁定。但是,现在我正在尝试使我的应用程序与 64 位兼容,并且 Appscript 框架似乎不支持 64 位。有没有一种在 Cocoa 中使用 Applescript 的“好”方法,它不会锁定我的应用程序,但仍然给我所需的完全控制权?

--firen

4

3 回答 3

6

它似乎SBApplication应该工作,但我以前没有使用过它。

根据@cocoadevcentral

SBApplication:用于使用 Objective-C 而不是 AppleScript 进行跨应用程序脚本调用。例如:获取当前的 iTunes 曲目。

这是文档的摘录:

SBApplication 类提供了一种机制,使 Objective-C 程序能够将 Apple 事件发送到可编写脚本的应用程序并接收 Apple 事件作为响应。因此,该程序可以控制应用程序并与之交换数据。Scripting Bridge 通过在 Apple 事件描述符和 Cocoa 对象之间桥接数据类型来工作。

尽管 SBApplication 包含手动发送和处理 Apple 事件的方法,但您永远不必直接调用这些方法。相反,SBApplication 的子类实现了自动处理 Apple 事件发送的特定于应用程序的方法。

例如,如果你想获取当前的 iTunes 曲目,你可以简单地使用 iTunes 应用程序动态定义的子类的 currentTrack 方法——它为你处理发送 Apple 事件的细节——而不是计算更复杂的,低级替代方案:

[iTunes propertyWithCode:'pTrk'];

如果您确实需要手动发送 Apple 事件,请考虑使用 NSAppleEventDescriptor 类。

希望有帮助!

于 2009-06-12T22:55:51.660 回答
2

正如Blaenk 提到的那样,脚本桥很可能是要走的路,尽管如果您必须遍历大型数组等,它可能会证明效率有些低。

在 Cocoa 中运行 Applescript 的最简单方法是使用 NSAppleScript。

苹果有一些很好的例子,当我需要做类似的事情时,我发现它们很有用。您可能想看看三篇文章。它们都包含一些示例代码,我总是觉得它们非常有用。

  • 使用 Scripting Bridge 的几个示例
  • 使用脚本桥进行性能和优化
  • NSAppleScript 技术说明/示例

我创建了一个包含完整 URL 的要点,因为我不能发布多个链接,作为一个新手和所有人。

http://gist.github.com/130146

于 2009-06-15T14:52:58.980 回答
1

Appscript 框架似乎不支持 64 位。

应该管用。确保在 Xcode 项目中设置了正确的架构和 SDK(64 位需要 10.5)。如果您有特定问题,请提交错误报告。

于 2009-07-10T14:58:27.150 回答