3

できれば Ruby からいくつかの異なる Mac OS X アプリケーションにアクセスしたいのですが、PHP で解決します。アプリケーションは Elgato の turbo.264 と Apple の iTunes です。どちらもApplescriptライブラリが定義されているため、Applescriptからやりたいことを実行できますが、Applescriptでこれを実行したくありません。Ruby や PHP でこれを行うことができない場合は、客観的な C/Cocoa で行うことができ、Ruby から呼び出すことができるある種のラッパーを作成できます。

これは可能ですか?メソッドがApplescriptで利用可能であれば、他の言語でも利用できるはずですが、何も見つけることができませんでした.

4

3 に答える 3

4

RubyOSA ( http://rubyosa.rubyforge.org ) を試すと、次のことができます。

require 'rbosa'
itunes = OSA.app('iTunes')

track = itunes.current_track
p track                     # <OSA::Itunes::FileTrack:0x1495e20>
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 アプリと通信できます

于 2009-08-15T01:33:10.480 に答える
3

Mac OS X 10.5 (現在のバージョン) には、Cocoa アプリケーションから AppleScript 機能にアクセスできるフレームワークであるScripting Bridgeが含まれています。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"
于 2009-08-15T04:35:45.307 に答える
3

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
于 2009-08-15T00:50:18.477 に答える