Mac OS X:以编程方式与应用程序交互
Mac OS X: interacting with an application programmatically
我正在做一个项目,我需要在现有应用程序(我自己的)上调用方法并使用它的一些功能。例如我的应用程序 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,然后调用 "image convert"。这可以通过 NSAppleScript 完成,但它仍然会启动应用程序并对其调用 methods/events。
是否有可能以某种方式在应用程序中创建 class 之一的实例(或获取指向)的实例并使用它?类似于 Windows 系统上的 COM 或自动化?
在我看来,您指定 'tell application' 的方式是最好的方式。
您的应用需要调用什么?也许某些功能可以用 Applescript 完成?它会简化很多事情。
如果您正在使用 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
我正在做一个项目,我需要在现有应用程序(我自己的)上调用方法并使用它的一些功能。例如我的应用程序 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,然后调用 "image convert"。这可以通过 NSAppleScript 完成,但它仍然会启动应用程序并对其调用 methods/events。
是否有可能以某种方式在应用程序中创建 class 之一的实例(或获取指向)的实例并使用它?类似于 Windows 系统上的 COM 或自动化?
在我看来,您指定 'tell application' 的方式是最好的方式。
您的应用需要调用什么?也许某些功能可以用 Applescript 完成?它会简化很多事情。
如果您正在使用 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