AppleScriptでAutomatorをうまく扱いたい [AppleScript辞書はつくれるか?]
ときどき、Automatorで作成したアプリケーションを、AppleScriptで連続して実行させる命令をすると、最初の実行が終わる前に次の実行が始まり実行がぶつかったまま悪ければFinderが使えなくなる事があります。
ようは、前の実行が終わってから次の実行が始まるようになってくれれば良いのです。が、AppleScriptでは開始するという命令しか送らないため、実行したアプリの監視をしているわけではないのがわかります。
普通のアプリケーションであれば、システムイベントで監視をしそのアプリのシステムイベントが無くなるまでループをして次へいかないようにしたら良いのですが、なぜかAutomatorでは作ったアプリの名前が出てこない。(なぜ?)
システムイベントのリストを見ると、Automatorの補助ファルを使って実行しているらしいので それを監視するしかないようなのです。
Automatorは、アプリ名を監視するのではなく、"Application Stub"という名前を監視するとうまくいくらしい。
で、こんな感じにしてみた。
Automatorでアプリを開きその直後からアプリを動かすための補助ファイルを監視して、補助が終了したらこのルーチンから抜けるというもの。
on run
tell application "Finder"
set add1 to desktop
end tell
AutomatorApp(add1, "aiueo")
AutomatorApp(add1, "kakikukeko")
end run
on AutomatorApp(add1, add2)
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で目的の名前が有るか無いか探しています。
あるうちはループ(繰返しに戻る)、無くなったらループから抜ける。
そんな感じでいけるとおもいます。
コメント 0