AppleScript:根据一组候选名称告诉 运行 应用程序

AppleScript : tell running application from set of candidate names

我们已经发布了多个不同版本的应用程序。它们具有相似的名称 – Foo BasicFoo DeluxeFoo Retro 等。相似但不同的捆绑包标识符也是。 (这不是我的主意!)一些用户安装了不止一个这些应用程序,但只能安装一个 运行.

所有应用程序都支持相同的 AppleScript 词典。我需要一个 AppleScript 来为我们的应用程序的当前 运行 版本编写脚本来执行某些操作。我该怎么做?

我成功了。它需要几件:

  • 获取 运行 应用程序的名称。您可以使用 processesSystem Eventsdo 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