Как получить свойства приложения

Я хочу получить properties приложения (имя задается как аргумент командной строки). В основном я хочу знать, является ли аргумент application_name в командной строке самым передним или нет.

Это то, что я делал (это работает для меня)

tell application "Google Chrome"
    get properties
end tell

Но когда я пытаюсь сделать это:

on run argv
  tell application (item 1 of argv)
    get properties
  end tell
end run

Я получаю сообщение об ошибке при выполнении команды osascript has_focus.scpt "Google Chrome"

environment/mac/scripts/has_focus.scpt:56:66: ошибка выполнения: Google Chrome получил ошибку: не удается получить каждое свойство. (-1728)

Пожалуйста помоги.


person Nikhil Wagh    schedule 10.07.2020    source источник


Ответы (2)


Это не может работать.

Аргумент tell application должен быть (буквальной) константой, поскольку терминология оценивается во время компиляции.

Исключением являются свойства version, frontmost и running, которые получает любое приложение. Эти свойства внутренне организованы как Application Object и не зависят от существующего словаря AppleScript.

person vadian    schedule 10.07.2020
comment
Ты уверен? У меня есть другой код, который принимает app_name в качестве аргумента и проверяет, работает он или нет, и он работает нормально. Смотрите это: pastebin.com/wEL4X98w - person Nikhil Wagh; 10.07.2020
comment
Да, я уверен. Есть несколько команд, на которые отвечает любое приложение, даже если оно не имеет явного словаря AppleScript, например isRunning, version и frontmost. Для этих команд разрешающая терминология не требуется. - person vadian; 10.07.2020
comment
Ты гений. Я просто хотел знать, является ли мое приложение самым передовым или нет. И не знал, что я могу использовать frontmost. Большое спасибо, сэр. - person Nikhil Wagh; 10.07.2020
comment
Если возможно, можете ли вы добавить свое последнее утверждение в ответ? - person Nikhil Wagh; 10.07.2020

Я вижу, что вы решили свою проблему через обсуждение и узнали о свойстве frontmost для application объектов.

Так что это больше интересно для завершения того, что вы изначально начали.

@vadian был прав, заявив:

Аргумент tell application должен быть (буквальной) константой, поскольку терминология оценивается во время компиляции.

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

on run argv
    set [appName] to argv
    tell the application named appName ¬
            to return its «class pALL»
end run

Затем в терминале:

osascript ~/Scripts/getAppProperties.applescript "Brave Browser"

«class ChBB»:«class CrBF» id 1, frontmost:false, «class ChOB»:«class CrBF» id 2,
class:application, name:Brave Browser, version:83.1.10.97

Естественно, без поиска по словарю свойства приложения и их значения возвращаются в чистом синтаксисе.


Примечание. Ввод необработанных синтаксических кодов в Редактор скриптов может быть немного сложным, так как он сразу же скомпилируется и все термины, которые понимает либо Редактор скриптов или AppleScript (например, properties, который обычно используется повсеместно и с одним и тем же кодом типа). Но вы можете создать AppleScript в любом текстовом редакторе. Если вам действительно нужно скомпилировать его в файл .scpt, то osacompile сделает это.

person CJK    schedule 10.07.2020