【问题标题】:Applescript Inside of a Cocoa ApplicationCocoa 应用程序中的 Applescript
【发布时间】:2010-11-02 13:01:57
【问题描述】:

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

--火爆

【问题讨论】:

    标签: objective-c cocoa macos applescript


    【解决方案1】:

    看来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 类。

    希望有帮助!

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      http://gist.github.com/130146

      【讨论】:

        【解决方案3】:

        Appscript 框架似乎不支持 64 位。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-09
          • 1970-01-01
          • 2013-06-05
          相关资源
          最近更新 更多