【问题标题】:Set Mac application window bounds from Terminal?从终端设置 Mac 应用程序窗口边界?
【发布时间】:2019-08-11 16:57:17
【问题描述】:

可以直接从终端设置 Mac 应用程序窗口的边界吗?

我整天都在使用这个 Applescript(由按键处理程序 Spark 调用),每个应用程序都不同 -

 set bounds of window 1 to {50, 50, 1200, 700}

Forklift 3.3.1 不处理 Applescript,我还没有找到使用 tell application "System Events" 等的方法。

互联网搜索没有任何用处,但是没有像 Applescript 的 set bounds 这样的简单终端命令可以做到这一点吗?

谢谢。

【问题讨论】:

    标签: terminal applescript


    【解决方案1】:

    此 AppleScript 代码适用于我使用最新版本的 macOS Mojave。

    set frontMostApp to (path to frontmost application)
    tell application "Finder" to set appName to name of (get properties of frontMostApp)
    set bounds of window 1 of application appName to {50, 50, 1200, 700}
    

    这是一个仅使用系统事件的不同版本

    tell application "System Events" to tell window 1 of (process 1 where it is frontmost)
        try
            set position to {50, 50}
            set size to {1200, 700}
        end try
    end tell
    

    【讨论】:

    • 谢谢。这适用于处理 Applescript(有自己的 Applescript 字典)的应用程序。它在 Forklift 3.3.1 中不起作用,因为它根本不处理 Applescript。使用 Applescript(如上)获取应用程序的名称将无济于事。对于叉车,如果可能的话,需要使用终端代码来完成。
    • wch1zpink 是的,这(上图)有效:“仅使用系统事件的不同版本”。关键似乎没有使用应用程序名称,仅指进程 1。(虽然它为什么工作我无法猜测,因为应用程序不读取或处理 Applescript。)
    • 前两行代码可以换成这一行:tell application "Finder" to set appName to displayed name of (path to frontmost application)
    • ① 作为在不涉及 Finder 的情况下检索最前面的应用程序名称的替代方法:set appName to the name of the application named (path to frontmost application)。但是,由于您最终使用了application 对象说明符,因此您可以将其简化一点:set A to the application named (path to frontmost application)。作为 AppleScript 的经验法则,随着时间的推移它会变得更加真实,如果您可以避免让 Finder 做某事,那么这样做是个好主意。 ② 为什么try 块?
    • try 块是在最前面的应用程序没有打开的窗口的情况下避免它抛出错误
    猜你喜欢
    • 2011-06-05
    • 2015-11-05
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2016-06-22
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多