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