对于我正在编写的应用程序,我需要访问一些其他应用程序的项目,Applescript 似乎是最好的方法。我一直在使用 Appscript 框架,它运行良好,因为它允许我线程化它并且不会在 Applescript 需要一段时间时让我的应用程序锁定。但是,现在我正在尝试使我的应用程序与 64 位兼容,并且 Appscript 框架似乎不支持 64 位。有没有一种在 Cocoa 中使用 Applescript 的“好”方法,它不会锁定我的应用程序,但仍然给我所需的完全控制权?
--firen
对于我正在编写的应用程序,我需要访问一些其他应用程序的项目,Applescript 似乎是最好的方法。我一直在使用 Appscript 框架,它运行良好,因为它允许我线程化它并且不会在 Applescript 需要一段时间时让我的应用程序锁定。但是,现在我正在尝试使我的应用程序与 64 位兼容,并且 Appscript 框架似乎不支持 64 位。有没有一种在 Cocoa 中使用 Applescript 的“好”方法,它不会锁定我的应用程序,但仍然给我所需的完全控制权?
--firen
它似乎SBApplication
应该工作,但我以前没有使用过它。
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 类。
希望有帮助!
正如Blaenk 提到的那样,脚本桥很可能是要走的路,尽管如果您必须遍历大型数组等,它可能会证明效率有些低。
在 Cocoa 中运行 Applescript 的最简单方法是使用 NSAppleScript。
苹果有一些很好的例子,当我需要做类似的事情时,我发现它们很有用。您可能想看看三篇文章。它们都包含一些示例代码,我总是觉得它们非常有用。
我创建了一个包含完整 URL 的要点,因为我不能发布多个链接,作为一个新手和所有人。
Appscript 框架似乎不支持 64 位。
应该管用。确保在 Xcode 项目中设置了正确的架构和 SDK(64 位需要 10.5)。如果您有特定问题,请提交错误报告。