AppleScript边界将应用程序从当前监视器中移动

AppleScript边界将应用程序从当前监视器中移动,applescript,Applescript,我录制了很多视频,所以我有一台连接了两个显示器的MacBook Pro。其中一个监视器的分辨率设置为1920x1080。我从特定的显示器上录制所有视频。现在,我运行Google Chrome和Visual Studio代码。然后,我根据录制的特定条件调整窗口大小(有时Chrome会占用更多空间,有时VSC会占用更多空间),因此这不是简单地进行并排设置的问题,每个应用程序都会占据一定的百分比 这个手工过程是乏味的,我通常希望他们是一个非常具体的大小根据我的记录。这就是为什么我想使用AppleScr

我录制了很多视频,所以我有一台连接了两个显示器的MacBook Pro。其中一个监视器的分辨率设置为1920x1080。我从特定的显示器上录制所有视频。现在,我运行Google Chrome和Visual Studio代码。然后,我根据录制的特定条件调整窗口大小(有时Chrome会占用更多空间,有时VSC会占用更多空间),因此这不是简单地进行并排设置的问题,每个应用程序都会占据一定的百分比

这个手工过程是乏味的,我通常希望他们是一个非常具体的大小根据我的记录。这就是为什么我想使用AppleScript根据各种录制场景简单地调整当前运行的应用程序的大小

为了创建一个测试用例,我编写了以下代码。虽然它可以完美地调整应用程序的大小,但它将Chrome从我正在录制的显示器移动到MacBook Pro的连接显示器上

以下是我到目前为止写的内容:

set theApp to "Google Chrome"
set xLocation to 0
set yLocation to 0
set appWidth to 750
set appHeight to 1080


tell application "Google Chrome"
    set bounds of front window to {0, 0, appWidth, appHeight}
end tell
不幸的是,我对AppleScript非常陌生,还没有弄清楚如何阻止脚本将应用程序(本例中为谷歌Chrome)从当前显示器移动到MacBook Pro显示器。我怀疑这是
前窗口
代码,但我很难了解它是如何工作的,因为我找不到文档

如何使用AppleScript调整当前正在运行的应用程序的大小,而不将应用程序的窗口移动到另一个监视器

我想,如果答案是打开应用程序的新副本,只要我可以打开或将其移动到适当的监视器,这也会起作用。谢谢

更新 很近,但不是很近。。。 评论中提供了我的意见。代码如下所示:

set theScreens to paragraphs of (do shell script "system_profiler SPDisplaysDataType -detailLevel |grep \"Resolution:\" | awk -F\"Resolution: \" '{print $2}'")
set theMonitor to ""
log theScreens

set the counter to count of theScreens --- set to 1 if you want to test it on monitor 1
if (counter) > 1 then
    -- we will do things for monitor 2
    set thisDisplayWidthHeightMonitor_2 to {(word 1 of item 1 of theScreens) + 2, 0, ((word 1 of item 1 of theScreens) + (word 1 of item 2 of theScreens)), word 3 of item 2 of theScreens}
    set theMonitor to thisDisplayWidthHeightMonitor_2
else
    -- we will do things for monitor 1
    set thisDisplayWidthHeightMonitor_1 to {0, 0, (word 1 of item 1 of theScreens), (word 3 of item 1 of theScreens)}
    set theMonitor to thisDisplayWidthHeightMonitor_1
end if

tell application "Safari"
    activate
    make new document with properties {URL:"http://netflix.com"}
    
    set bounds of window 1 to theMonitor
    log theMonitor
    
end tell

tell application "System Events"
    tell application process "Safari"
        set value of attribute "AXFullScreen" of window 1 to true
    end tell
end tell
如果我记录变量
屏幕
,我会得到以下结果:

(*3072 x 1920 Retina, 3840 x 2160 (2160p/4K UHD 1 - Ultra High Definition), 4608 x 2592*)
该代码没有显示窗口放置所需的正确
x
位置。它只是显示了我正在使用的显示器和它们的超高分辨率

当代码打开Safari(在本例中)时,它使用变量
theMonitor
设置边界,并且它确实在我希望它打开的监视器中打开。输出为:

3074, 0, 6912, 2160
由于代码确实在我想要的监视器中显示应用程序,因此我假设3074是符合我需要的正确x位置,因此下面是我更新的代码:

tell application "Google Chrome"
    set bounds of front window to {3074, 0, 750, 1080}
end tell
不幸的是,谷歌Chrome完全消失在屏幕上,在任何显示器或台式机上都找不到。我必须退出Chrome并重新启动,这样我才能再次使用它(或者改变屏幕分辨率)


我仍然有以下问题:如何在我想要的正确显示器和x&y位置打开应用程序?

0,0
是主显示器的左上角。因此,您的代码移动窗口,使其左上角位于主监视器的左上角。要编写脚本,您需要知道监视器在“世界”坐标系中的位置。请参阅示例。感谢您提供的链接,但它并没有真正回答问题。它甚至可以全屏打开监视器中的应用程序窗口。不幸的是,它没有解释如何设置x位置或宽度。相反,它使用了一堆我不完全理解的
word
item
值,并创建了一个大数字(不是可读的
bounds
数组。你能就如何解决我的问题提供一些见解吗?我不同意。我运行了建议解决方案的第一行
将屏幕设置为(执行shell脚本“system_profiler SPDisplaysDataType-detailLevel | grep\”解析:\“| awk-F\”解析:\“{print$2}””
并获得您所需的确切信息,即监视器所在的位置。嗨,Matt,我完全同意代码位于监视器所在的位置,但我的问题是:“如何使用AppleScript调整当前正在运行的应用程序的大小,而不将应用程序的窗口移动到另一个监视器?".使用您共享的代码,也许我可以从正确的x坐标开始设置边界,但从我看到的情况来看,它只是告诉我什么监视器使用1920x1080位置,而不是正确的边界。可能我遗漏了什么?抱歉,我对这一点非常陌生。您可以通过查看风的边界来查看监视器的显示现在,我们正在将其与监视器的边界进行比较。因此,如果现在调整/重新定位窗口,请将其保留在监视器中,它现在是一个。据我所知,这就是问题所在。