【问题标题】:How to get properties of an application如何获取应用程序的属性
【发布时间】:2020-07-13 14:44:56
【问题描述】:

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

请帮忙。

【问题讨论】:

    标签: applescript


    【解决方案1】:

    这行不通。

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

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

    【讨论】:

    • 你确定吗?我有一些其他代码以app_name 作为参数并检查它是否正在运行,并且工作正常。看到这个:pastebin.com/wEL4X98w
    • 是的,我确定。 any 应用程序会响应几个命令——即使它没有明确的 AppleScript 字典——例如 isRunningversionfrontmost。对于这些命令,不需要解析术语。
    • 你是个天才。我只是想知道我的应用程序是否位于最前面。而且不知道我可以使用frontmost。非常感谢,先生。
    • 如果可能的话,你能在答案中添加你的最后一句话吗?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多