#author("2022-06-15T11:24:15+09:00","siio","siio") #author("2022-06-15T11:25:57+09:00","siio","siio") *Apple Scriptを使うメモ [#ba70fbcf] **Apple Scriptをコマンドライン・C言語・Javaから使う [#o2402a8e] ***コマンドラインから音楽再生する [#t6e6277d] コマンドラインからiTunesを再生させる場合は以下のようにする。 osascript -e 'tell application "iTunes" to play' 最近のmacOSではiTunesが廃止されてMusicになったので、以下のようにする。 osascript -e 'tell application "Music" to play' ***普通のプログラム言語からはシェルコマンドを実行する関数を呼べばok [#d14d3fb9] 例えばC言語の場合は以下のようにする。 #include <stdlib.h> int main(void){ system("osascript -e \'tell Application \"iTunes\" to play\'"); return 0; } ***Javaでも同様にシェルコマンドを実行する関数exec(String)を呼べばok [#h6c1d754] と思ったけどJavaだけは普通ではなかった。 Runtime.getRuntime().exec("osascript -e \'tell Application \"iTunes\" to play\'"); は、なぜか動かない。exec(String [])というメソッドを呼ばないといけないらしい。 ( http://www.peterfriese.de/running-applescript-from-java/ ) Runtime.getRuntime().exec({"osascript","-e","tell Application \"iTunes\" to play"}); でこれをtry catchすれば良い。 try{ Runtime.getRuntime().exec({"osascript","-e","tell Application \"iTunes\" to play"}); }catch (Exception e) {} ***Processingでも同様 [#c98675c9] int iTunes (String cmd) { int result=0; String tell = "tell Application \"iTunes\" to " + cmd; String[] command = {"osascript","-e",tell}; try{ Runtime.getRuntime().exec(command); }catch (Exception e) { result = -1; } return result; } void setup(){ iTunes("play"); } void draw(){} こんな方法もある。(iTunesの代わりにMusicになってます) void setup(){ StringList strout=new StringList(); //for standard out StringList strerr=new StringList(); //for error shell(strout,strerr,"osascript -e \'tell Application \"Music\" to play\'"); //third op is the shell command for(String el:strout){ println(el); } for(String el:strerr){ println(el); } } **コマンドラインからOS X アプリケーションを起動する [#v6643d73] hoge.m4vという動画ファイルをQuick Time Playerでフルスクリーンで起動する方法 #!/usr/bin/osascript tell application "QuickTime Player" set aMovie to open "/Volume/home/siio/hoge.m4v" present aMovie play aMovie activate end tell コマンドライン引数から動画ファイルを指定する方法(Apple Script版) on run argv tell application "QuickTime Player" set aMovie to open (first item of argv) present aMovie play aMovie activate end tell end run コマンドライン引数から動画ファイルを指定する方法(シェルスクリプト版) #!/bin/sh echo " tell application \"QuickTime Player\" set aMovie to open \"$1\" present aMovie play aMovie activate end tell " | osascript - **OS XのGUIからシェルスクリプトを起動する [#m5952e77] たとえばシェルスクリプトで open /Users/siio/cat.jpg とすると写真ファイルが「プレビューで」開く。以下では、これをGUIから実行してみる。 ***Apple Scriptエディタで実行する [#ee37d3c0] アプリケーション/ユーティリティのなかにある、Apple Scriptエディタ.app http://gyazo.com/38e0c4c70f5dec52a0539803476ae249.png を開いて、 do shell script "open /Users/siio/cat.jpg を書き込み、実行ボタン http://gyazo.com/faaa5ecfd64e6a22fd91d0f4179487b8.png を押せば、実行する。 ***ダブルクリックで実行する [#g32c6a83] またApple Scriptエディタの、メニューバーから、 「ファイル」「別名で保存」からアプリケーションを選択して保存すれば、ダブルクリックで起動するようになる。 ***ファイルをファイルダイアログパネルで指定する [#b7cb9146] ダブルクリックで起動したときに、ファイルダイアログを呼び出したかったら、 次のようにする。ここでは開くファイルの拡張子をjpgにしている。Apple Scriptでは、ディレクトリの区切りが/じゃなくて:だったりするので、UNIX形式に変換する必要がある。 set aFile to choose file with prompt "Open file to be edited" of type ("jpg") set aFile_posix to POSIX path of aFile do shell script "open " & aFile_posix ***ファイルをドラッグアンドドロップで指定する [#h2d49905] http://gyazo.com/3518dbba2ca0eca3df8a3f653db4dda4.png のように、 on open drop_item set aFile_posix to POSIX path of drop_item do shell script "open " & aFile_posix end open とすればよい。 ***複数のファイルをドラッグアンドドロップできるようにする [#e7f2e2a0] on open drop_items repeat with aFile in drop_items set aFile_posix to POSIX path of aFile do shell script "open " & aFile_posix end repeat end open **アプリケーションにキーストロークを送る [#keystroke] -Numbersをアクティベートしてthis is A TESTをセルに入力する例。webページのフォームの自動入力などにも使える。シフトキーやコントロールキーの押下も指定できる。基本はSystem Eventsアプリを呼び出すこと。 tell application "Numbers" activate end tell tell application "System Events" keystroke "this" keystroke tab keystroke "is" keystroke return key down {shift} keystroke "a test" key up {shift} end tell -メニューの選択なども可能。 http://www.arcaid.jp/modules/arcaid_lib/index.php/lib_as/lib_as_02_systemevent01.html