Mac OS X:以编程方式与应用程序交互

时间:2015-05-11 11:05:42

标签: macos automation applescript osx-yosemite

我正在开发一个项目,我需要在现有应用程序(我自己的)上调用方法并使用它的一些功能。对于例如我的应用程序ThunderBolt在Mac OS X 10.10上运行。它还提供了一个事件字典,可以通过Apple Script从外部调用,或者其他一些我还不知道的方式。

我的问题是在Mac OSX上以编程方式与应用程序交互的不同(和更好)方式是什么?如果我在Apple Script Editor中使用类似下面的代码:

tell application "ThunderBolt"
    set open_file to (choose file with prompt "Choose the file you wish to parse")
    set theContents to read open_file as data
    set retPict to (image convert theContents)
end tell

然后它将启动带有闪屏的ThunderBolt,然后调用"图像转换"。这可以通过NSAppleScript完成,但它仍然会启动应用程序并在其上调用方法/事件。

是否有可能以某种方式创建应用程序内部类的一个实例(或获取指针)并使用它?类似于Windows系统上的COM或自动化的东西?

2 个答案:

答案 0 :(得分:2)

如果您正在使用OS X 10.10,可以考虑查看JavaScript for Automation (JXA)

有了它,你可以显然在你的应用程序中构建方法,可以从用JS编写的客户端脚本调用(虽然我还不熟悉如何在应用程序端处理这样的事情的实现细节) 。但是作为OS X Yosemite的一部分提供的许多应用都内置了这样的API(例如iTunes和Finder)。

这是由Alex Guyot撰写的关于JXA的精彩教程:http://www.macstories.net/tutorials/getting-started-with-javascript-for-automation-on-yosemite/

JXA-Cookbook回购似乎也是一个很好的资源:https://github.com/dtinth/JXA-Cookbook/wiki

这是一个简短的例子 - 这个脚本让iTunes回到了一个轨道。在iTunes播放时尝试(通过将文本放入脚本编辑器,将语言选项设置为JavaScript,然后点击“运行”按钮):

iTunes = Application('iTunes')
state = iTunes.playerState()
// Console msgs show up in the Messages tab of the bottom view:
console.log("playerState: " + state)
iTunes.backTrack()

或者,您可以将代码放入.js文件并在命令行上运行:

$ osascript itunes-backTrack.js
playerState: playing

答案 1 :(得分:0)

在我看来,指定'tell application'的方式是最好的方法。

您如何处理需要调用的应用?也许有些功能可以通过Applescript完成?它会简化很多事情。