Вывести приложение на передний план по его пути - PullRequest
0 голосов
/ 07 ноября 2018

Как вывести приложение на фронт по его пути?

т.е. Предположим, что /Applications/MyApp.app уже началось; За один раз я хочу вывести это окно MyApp.app на передний план, передав его путь к AppleScript: myApplScript.scpt /Applications/MyApp.app.

Я попробовал этот скрипт, но у меня это не сработало:

on run argv
    set apppath to (item 1 of argv) as string
    tell application "System Events"
        set frontmost of every process whose path is apppath to true
    end tell
end run

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Вы пробовали проверять открытые файлы для процесса? Есть несколько способов сделать это (см .: эта статья )

Обычно двоичный файл приложения будет открытым файлом процесса. Имейте в виду, что двоичный исполняемый файл может содержаться в пакете, и вам нужно будет найти его, выполнив команду show package contents в поисковике, а затем добавив путь к исполняемому файлу в пакете. В пакете чек под /Contents/MacOs/.

Это может занять много времени, если у вас много открытых процессов и, следовательно, не очень практично запускать часто. Также примите во внимание, что один исполняемый файл может быть запущен в более чем одном экземпляре процесса.

Жаль, что стандартный Activity Monitor не поддерживает сценарии appleScript, который я только что проверил, надеясь на более дружественное решение для appleScript. Вы все равно сможете достичь того же результата, вызвав командную строку оболочки.

Также часто имя процесса совпадает или совпадает с именем файла, но это зависит от приложения или процесса, который вы ищете.

Я предполагаю, что у вас должны быть установлены разные версии одного и того же приложения, которое нужно проверить для приложения по пути?

Или, если вам не нужно определять имя пути динамически, вы можете просто посмотреть его заранее, используя Activity Monitor или в командной строке. Там вы можете определить имя процесса, которое соответствует вашему запущенному приложению, запущенному по указанному пути. Зная заранее имя процесса, вы легко сможете использовать

tell application "System Events" to get application process "Name of My Application"

     --insert the actions you want to perform on your running app here

end tell

Чтобы решить любые проблемы уникальности процесса, если одно и то же приложение работает более одного раза, вы всегда можете получить идентификатор процесса pid или unix. Вот статья о том, как получить pid в appleScript скрипт работающего приложения

0 голосов
/ 07 ноября 2018

Обычно все, что вам нужно сделать, это activate приложение, которое переключает фокус на него (даже если приложение уже запущено):

activate application "MyApp"

Вы можете использовать эту команду напрямую, указав путь к ней:

activate application "/Applications/MyApp.app"

или, в вашем конкретном случае,

activate application apppath

хотя вам и не нужно.

Если это не сработает, вы можете попробовать Системные события :

tell application "System Events" to set frontmost of process "MyApp" to true

или, используя его путь:

tell application "System Events" to set the frontmost of the first process ¬
    whose POSIX path of application file is "/Applications/MyApp.app" to true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...