如何编写 Applescript 来调整外接显示器上的应用程序窗口大小

Posted

技术标签:

【中文标题】如何编写 Applescript 来调整外接显示器上的应用程序窗口大小【英文标题】:How can I write an Applescript to resize an application window on external monitor 【发布时间】:2021-06-19 22:14:37 【问题描述】:

我想编写一个 Applescript 来调整外部屏幕上 Safari 窗口的大小。 我有一个 1440x900 的 Macbook Air 屏幕和一个 2560x1440 的华硕外接显示器。 我想在我的外接显示器上保留 Safari,左侧有 170 像素的间隙。 我编写了以下基本脚本:

tell application "System Events"
    tell application "Safari"
        activate
        set bounds of window 1 to 170, 0, 2560, 1440
    end tell
end tell

结果是,唯一打开的 Safari 窗口从我的外接显示器移动到我的 Macbook Air (Mojave) 屏幕,宽度正确(2560-170 = 2390)和高度错误(900 而不是指定的 1440)。

如何确保正确的宽度和高度并将窗口保留在外接显示器上。 非常感谢。

【问题讨论】:

这也取决于你的屏幕是如何排列的。例如,我的笔记本电脑顶部有我的外部设备,在相同的 x 坐标中,所以我要在外部显示器上放置任何东西,我的 y 位置将是我的外部屏幕的负高度。 优秀。我没有想到可以通过负坐标访问屏幕空间。谢谢,这真的很有帮助。 最简单的做法是手动将 Safari window 放置在您想要的位置和大小,然后运行 ​​tell application "Safari" to return bounds of window 1 ,现在你有了坐标。要重复设置您想要的窗口和您想要的大小,请使用从第一个 command 返回的 bounds 并更改 command 以设置 bounds,例如:tell application "Safari" to set the bounds of window 1 to n, n, n, n, 【参考方案1】:

在这种情况下,您不需要使用系统事件; Safari 知道如何调整自己的窗口大小。您需要做的就是获取窗口的边界,更改返回列表的最后两项,然后将边界设置为修改后的数组。这将改变大小而不移动窗口的位置。

tell application "Safari"
    activate
    set old_bounds to bounds of window 1
    set item 3 of old_bounds to 2560
    set item 4 of old_bounds to 1440
    set bounds of window 1 to old_bounds
end tell

【讨论】:

谢谢特德。我的解决方案基于您的代码和负坐标。 我不会使用应用程序 (Safari) 窗口移动和调整大小。我编写了一个可重用的处理程序来调整大小,接受一个应用程序窗口作为类似于示例代码的参数,不幸的是,它在不同应用程序(Safari、终端、控制台等)的窗口上操作时表现不同。大小也不一致,通常我需要重新运行脚本才能获得正确的窗口大小。我重新实现了我的处理程序以使用系统事件、更新位置和大小属性,这对我来说没有任何问题。 @user3579815:你应该把它写成一个单独的答案,或者如果你不这样做,我可以将它添加到我的。 我认为我无法给出更完整的答案,所以我可以通过 cmets 提供支持。如果有帮助,请随时将其添加到您的答案中。【参考方案2】:

建议使用这个:

tell application "Safari"
    set the bounds of window 1 to 260, 21, 1660, 1400
    activate
end tell

【讨论】:

以上是关于如何编写 Applescript 来调整外接显示器上的应用程序窗口大小的主要内容,如果未能解决你的问题,请参考以下文章

笔记本外接显示器分辨率怎么设置

如何设置电脑显示器的分辨率

如何为用 AppleScript 编写的脚本应用程序设置应用程序图标?

windows7旗舰笔记本怎样把外接显示器 分辨率调成 640*480

如何让 Apple Script 仅在特定的显示器/显示器中单击?

CPack 不能有 AppleScript 调整的磁盘图像和音量图标