SSブログ

AppleScriptでAutomatorをうまく扱いたい [AppleScript辞書はつくれるか?]

 

 ときどき、Automatorで作成したアプリケーションを、AppleScriptで連続して実行させる命令をすると、最初の実行が終わる前に次の実行が始まり実行がぶつかったまま悪ければFinderが使えなくなる事があります。

 ようは、前の実行が終わってから次の実行が始まるようになってくれれば良いのです。が、AppleScriptでは開始するという命令しか送らないため、実行したアプリの監視をしているわけではないのがわかります。

 

 普通のアプリケーションであれば、システムイベントで監視をしそのアプリのシステムイベントが無くなるまでループをして次へいかないようにしたら良いのですが、なぜかAutomatorでは作ったアプリの名前が出てこない。(なぜ?)

システムイベントのリストを見ると、Automatorの補助ファルを使って実行しているらしいので それを監視するしかないようなのです。

 

Automatorは、アプリ名を監視するのではなく、"Application Stub"という名前を監視するとうまくいくらしい。

で、こんな感じにしてみた。

 

ss.jpg

 

Automatorでアプリを開きその直後からアプリを動かすための補助ファイルを監視して、補助が終了したらこのルーチンから抜けるというもの。

 

 

 

 

 


on run

tell application "Finder"

set add1 to desktop

end tell

AutomatorApp(add1, "aiueo")

AutomatorApp(add1, "kakikukeko")

end run

 

on AutomatorApp(add1add2)

tell application "Finder"

open file (add2 & ".app") of add1

end tell

repeat 1000 times

delay 0.1

tell application "System Events"

set processApp to the name of every process

end tell

set AppList to processApp as text

if AppList contains "Application Stub" then

-- (trueでは実行するものがないので、空)

else

exit repeat

end if

end repeat

end AutomatorApp

 

 

Automatorファイルの名前とアドレスを分けたのは、後々の改造のため。1つにしてても良いと思います。

Repeat 1000 timesで、1000回繰り返すとしてますが、用事がおわったらExit repeatで抜けるわけですから Repeat だけにして永久ループにしても良いとは思いますが 念のため。

システムイベントの every processで現在実行中のプロセスのリストを取得し、テキスト化してContainsで目的の名前が有るか無いか探しています。

あるうちはループ(繰返しに戻る)、無くなったらループから抜ける。

そんな感じでいけるとおもいます。

 


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。