如何获取应用程序的属性

时间:2020-07-10 09:42:05

标签: applescript

我想获取应用程序的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)

请帮助。

2 个答案:

答案 0 :(得分:2)

这行不通。

tell application的参数必须是一个(文字)常量,因为该术语是在编译时评估的。

任何应用程序都检索的属性versionfrontmostrunning是一个例外。这些属性在内部组织为Application Object,并且独立于现有的AppleScript字典。

答案 1 :(得分:1)

我发现您通过讨论解决了问题,并了解了frontmost个对象的application属性。

因此,更有趣的是要完成您最初开始的工作。

@vadian通过声明是正确的:

tell application的参数必须是一个(literal)常量,因为术语是在编译时评估的。

解决此问题的方法是不使用术语。术语要求所指示的应用程序能够查找其脚本字典中使用的术语,并将其从人类友好的术语转换为原始的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将做到这一点。

相关问题