0

我想得到properties一个应用程序(名称作为命令行参数给出)。基本上我想知道application_namein 命令行参数是否是最前面的。

这就是我一直在做的(它对我有用)

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)

请帮忙。

4

2 回答 2

2

这行不通。

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

一个例外是 properties version,任何应用程序都可以检索它frontmostrunning这些属性在内部组织为应用程序对象,并且独立于现有的 AppleScript 字典。

于 2020-07-10T09:54:01.447 回答
2

我看到您通过讨论解决了您的问题,并了解了对象的frontmost属性application

所以这是完成你最初开始的事情的更多兴趣点。

@vadian 是正确的:

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

解决此问题的方法是不使用术语。术语要求被指示的应用程序能够查找其脚本字典中使用的术语,并将它们从对人类友好的术语转换为原始 Apple 事件代码。所以去掉中间人,你可以通过原始的 chevron 语法发出语句、给出命令和检索属性:

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就会这样做。

于 2020-07-10T17:31:16.250 回答