从Ruby或PHP或Cocoa访问Mac应用程序

我想从Ruby中访问几个不同的Mac OS X应用程序,但我会选择PHP。 应用程序是Elgato的turbo.264和Apple的iTunes。 两者都定义了Applescript Libraries,允许我从Applescript做我想做的事情,但我不想在Applescript中做到这一点。 如果我不能在Ruby或PHP中这样做,也许我可以在目标C / Cocoa中创建它并创建一些我可以从Ruby调用的包装器。

这有可能吗? 似乎这些方法在Applescript中可用,它们应该以其他语言提供,我几乎找不到任何东西。

试试RubyOSA( http://rubyosa.rubyforge.org )然后你可以这样做:

require 'rbosa' itunes = OSA.app('iTunes') track = itunes.current_track p track #  p track.name # "Over The Rainbow" p track.artist # "Keith Jarrett" p track.duration # 362.368988037109 p track.date_added.to_s # "2006-06-30" p track.enabled? # true # Play the selected track. itunes.play # Fade the volume. 100.times { |i| itunes.sound_volume = i; sleep 0.1 } # Set iChat's status message to the current track. OSA.app('iChat').status_message = "Playing: #{track.name}" 

您可以与任何支持AppleScript的Mac OS X应用程序通信

尝试过appscript( http://appscript.sourceforge.net/rb-appscript/index.html )?

来自该网站的示例:

而不是AppleScript

 tell application "TextEdit" get paragraph 1 of document "ReadMe" end tell 

你用Ruby写的

 app('TextEdit').documents['ReadMe'].paragraphs[1].get 

Mac OS X 10.5(当前版本)包括Scripting Bridge ,该框架允许您从Cocoa应用程序访问AppleScriptfunction。 您也可以从RubyCocoa和PyObjC访问它 。 基本上,它的工作原理如下:

 require 'osx/cocoa' require_framework 'ScriptingBridge' include OSX iTunes = SBApplication.applicationWithBundleIdentifier 'com.apple.iTunes' iTunes.activate puts "Play #{iTunes.currentTrack.name}?" iTunes.playpause if gets.strip == "Yes"