我想获取应用程序的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)
请帮助。
答案 0 :(得分:2)
这行不通。
tell application
的参数必须是一个(文字)常量,因为该术语是在编译时评估的。
任何应用程序都检索的属性version
,frontmost
和running
是一个例外。这些属性在内部组织为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
将做到这一点。