AppleScript:根据一组候选名称告诉 运行 应用程序
AppleScript : tell running application from set of candidate names
我们已经发布了多个不同版本的应用程序。它们具有相似的名称 – Foo Basic、Foo Deluxe、Foo Retro 等。相似但不同的捆绑包标识符也是。 (这不是我的主意!)一些用户安装了不止一个这些应用程序,但只能安装一个 运行.
所有应用程序都支持相同的 AppleScript 词典。我需要一个 AppleScript 来为我们的应用程序的当前 运行 版本编写脚本来执行某些操作。我该怎么做?
我成功了。它需要几件:
- 获取 运行 应用程序的名称。您可以使用
processes
或 System Events
或 do shell script "ps …"
来执行此操作,无论您认为哪个在您的情况下更可靠。
- 然后,使用 您的 Mac 上的其中一个应用程序的条款,您可以
- *tell application appName...,前提是你有
- 将您的脚本保存为 应用程序,因此它已经编译。
这是一些代码。我正在处理的脚本还没有求助于系统事件,所以为了让新用户免于访问系统偏好设置的痛苦,我选择使用 /bin/ps 代替……
set appName to runningAppWithBaseName("Foo")
using terms from application "Foo Deluxe" -- an app on your Mac
tell application appName
(* whatever code you want here *)
end tell
end using terms from
on runningAppWithBaseName(baseName)
set command to "/bin/ps -eo args | grep " & baseName & " | grep -v grep"
(* The "grep -v grep" is to exclude the grep process itself from the results. *)
try
set fullPathOfRunningApp to do shell script command
end try
(* Here, given the fullPathOfRunningApp and your list of candidate app names, *)
(* insert code to determine the name of the running app. *)
return nameOfRunningApp
end runningAppWithBaseName
我们已经发布了多个不同版本的应用程序。它们具有相似的名称 – Foo Basic、Foo Deluxe、Foo Retro 等。相似但不同的捆绑包标识符也是。 (这不是我的主意!)一些用户安装了不止一个这些应用程序,但只能安装一个 运行.
所有应用程序都支持相同的 AppleScript 词典。我需要一个 AppleScript 来为我们的应用程序的当前 运行 版本编写脚本来执行某些操作。我该怎么做?
我成功了。它需要几件:
- 获取 运行 应用程序的名称。您可以使用
processes
或System Events
或do shell script "ps …"
来执行此操作,无论您认为哪个在您的情况下更可靠。 - 然后,使用 您的 Mac 上的其中一个应用程序的条款,您可以
- *tell application appName...,前提是你有
- 将您的脚本保存为 应用程序,因此它已经编译。
这是一些代码。我正在处理的脚本还没有求助于系统事件,所以为了让新用户免于访问系统偏好设置的痛苦,我选择使用 /bin/ps 代替……
set appName to runningAppWithBaseName("Foo")
using terms from application "Foo Deluxe" -- an app on your Mac
tell application appName
(* whatever code you want here *)
end tell
end using terms from
on runningAppWithBaseName(baseName)
set command to "/bin/ps -eo args | grep " & baseName & " | grep -v grep"
(* The "grep -v grep" is to exclude the grep process itself from the results. *)
try
set fullPathOfRunningApp to do shell script command
end try
(* Here, given the fullPathOfRunningApp and your list of candidate app names, *)
(* insert code to determine the name of the running app. *)
return nameOfRunningApp
end runningAppWithBaseName