AppleScript: сообщить запущенному приложению из набора имен кандидатов

Мы опубликовали несколько разных версий приложения. Они имеют схожие названия - Foo Basic, Foo Deluxe, Foo Retro и т. Д. Схожие, но разные идентификаторы пакетов. (Это была не моя идея!) У некоторых пользователей установлено более одного из этих приложений, но может работать только одно.

Все приложения поддерживают один и тот же словарь AppleScript. Мне нужен AppleScript, чтобы написать скрипт для текущей работающей версии нашего приложения. Как я могу это сделать?

1 ответ

Решение

Я получил это работает. Требовалось несколько штук:

  • Получить имя запущенного приложения. Вы можете сделать это либо с processes из System Events или еще do shell script "ps …"Как вы думаете, будет более надежным в вашей ситуации.
  • Затем, используя термины из одного из приложений на вашем Mac, вы можете
  • * сообщить приложение 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
Другие вопросы по тегам