私は自分の作業環境を開始するためのアップルスクリプトを持っていますが、それについて少し疑問があります。スクリプトでいくつかのプログラムを起動し、起動したら非表示にします。現在、コードは次のようになっています。
tell application "Firefox" to activate
delay 0.5
tell application "Finder"
set visible of process "Firefox" to false
end tell
明らかに、delay 0.5は単なるプレースホルダーです。理想的には、プログラムの読み込みが完了したらすぐに非表示にします。残念ながら、ロード時間は大きく異なります(0.2〜5秒)。コールバックやアプリケーションのイベントを監視する関数のようなものはありますか?
ループ内の可視性ステータスをクエリし、機能するまで非可視に設定することを繰り返します。
set appname to "Firefox"
tell application appname to launch
tell application "System Events"
repeat until visible of process appname is false
set visible of process appname to false
end repeat
end tell
AppleScript Editorのイベントログを監視すると、数回の試行が必要になる可能性があることは明らかです。 Xcodeで試してみると、次のことが1490回繰り返されました。
set visible of process "Xcode" to false
get visible of process "Xcode"
--> true
それが最終的に機能する前に:
set visible of process "Xcode" to false
get visible of process "Xcode"
--> false
通常、遅延を追加する必要はありませんが、この場合、visibileプロパティをfalseに設定しても、アプリケーションが開き終えるとtrueに戻ります。そのため、その値やプロセスが存在するかどうかを確認することはできません。
launch
またはopen -jg
を使用して、ウィンドウが表示されていないアプリケーションを開くことができます。 launch
は、アプリケーションが以前に開かれていなかった場合、新しいウィンドウを開きます。 open -jg
は、アプリケーションは開いているが表示されているウィンドウがない場合に、新しいウィンドウを開きます。
set b to "com.Apple.TextEdit"
tell application "System Events"
if bundle identifier of processes contains b then
launch application id b
else
do Shell script "open -jgb " & b
end if
end tell
Alfred、Growl、nvALT、The Unarchiver、X11などのいくつかのアプリケーションは、どちらでも動作しませんでした。 visible
をfalseに設定する前に、固定の遅延を追加する必要がある場合があります。