5

このコードは、ユーザーに「FooApp」を探すように求めるため、存在しないアプリでは機能しません(ユーザーと対話したくない場合)。

get exists application "FooApp"

このコードは、プロセス名がアプリケーション名と一致するアプリでのみ機能します。アプリケーション名は、すべてではありませんがほとんどのアプリケーションを対象としています。

tell application "System Events"
    get exists application process "FooApp"
end tell

(たとえば、私のマシンでは「OmniGraffle Professional」はプロセス名ですが、対応するアプリケーション名は「OmniGraffle Professional4」です。)

4

4 に答える 4

5

@ regulus6633は、例で2つの別々のことを行っていることを指摘するのが正しいです。また、バンドル識別子に関する彼のアドバイスは的を射ています。

アプリケーションがインストールされているかどうかを確認するための私の好ましい方法は次のとおりです。

try
    tell application "Finder" to get application file id "bundle.id.here"
    set appExists to true
on error
    set appExists to false
end try

これにより、「アプリケーションxはどこにありますか?」を回避できます。ダイアログを表示し、ブール値をappExistsに割り当てます。あなたはまたdisplay alerton errorブロック(またはあなたが望むもの)にいることができます。

2番目の例では、次のように記述できます。

tell application "System Events"
    set processIsRunning to ((bundle identifier of processes) ¬
    contains "com.bundle.id.here")
end tell

@ regulus6633のコードとほぼ同じように動作しますが、プロセスのリストを取得して1行でチェックします。また、processIsRunningの初期化について心配する必要はありません。

アプリケーション名を使用している場合は、と交換bundle identifierしてnameください。

于 2013-01-16T14:42:27.293 に答える
4

2つのスクリプトが異なることをすることに注意してください。最初のものはそれがコンピュータ上にあるかどうかをチェックします。2つ目は、現在実行されているかどうかを確認します。それで、これが最初のことをする方法です。

set doesExist to false
try
    do shell script "osascript -e 'exists application \"foo\"'"
    set doesExist to true
end try

return doesExist

また、ご指摘のとおり、一部のアプリケーションにはさまざまな名前が付いていることに注意してください。そのような場合は、名前の代わりにアプリのバンドルIDを使用できます。SafariのIDを取得して使用する方法は次のとおりです...

set appID to id of application "Safari"
exists application id appID

また、2番目のスクリプトのように、実行されているかどうかを確認したい場合は、これを行うことができます...

set processIsRunning to true
tell application "System Events"
    set runningProcesses to processes whose bundle identifier is appID
end tell
if runningProcesses is {} then set processIsRunning to false
return processIsRunning
于 2013-01-12T20:56:22.870 に答える
2

これは古い質問ですが、答えはまだ役立つかもしれません。次のシェルスクリプトはアプリケーションを起動せず、「アプリケーションxはどこにありますか?」を回避します。アプリケーションが存在しない場合はダイアログを表示し、アプリケーション名またはバンドルIDのいずれかを入力として受け入れ、アプリケーションのバンドルIDが存在する場合はそれを返し、存在しない場合は空の文字列を返します。

set appBundleId to do shell script "osascript -e " & ("id of application \"" & appRef & "\"")'s quoted form & " || osascript -e " & ("id of application id \"" & appRef & "\"")'s quoted form & " || :"
set doesExist to (appBundleId ≠ "")

ここで、appRefはアプリケーション名またはバンドルIDのいずれかです。

于 2016-10-31T16:05:55.620 に答える
0

これを行う別の方法は、同じバンドルIDを持つ2つのアプリケーションがある場合、アプリケーション名を使用することです。たとえば、AdobeInDesignCS5.5とAdobeInDesignCS6の両方com.adobe.InDesignにバンドル識別子があります。

tell application "System Events"
    name of every process contains ("Adobe Photoshop CS5.5")
end tell
于 2016-05-19T21:00:10.130 に答える