AppleScript如何获取当前显示分辨率?

AppleScript如何获取当前显示分辨率?,applescript,resolution,Applescript,Resolution,我试图根据鼠标光标的位置获取两个显示器的当前显示分辨率 i、 e.当鼠标光标位于第一个显示器上时,我想获得该显示器的分辨率 使用shell脚本,我可以获得两种分辨率: set screenWidth to (do shell script "system_profiler SPDisplaysDataType | grep Resolution | awk '{print $2}'") 但我不知道哪个显示器当前处于“活动”状态 有什么想法吗?Applescript无法访问光标位置,即使是通过系

我试图根据鼠标光标的位置获取两个显示器的当前显示分辨率

i、 e.当鼠标光标位于第一个显示器上时,我想获得该显示器的分辨率

使用shell脚本,我可以获得两种分辨率:

set screenWidth to (do shell script "system_profiler SPDisplaysDataType | grep Resolution | awk '{print $2}'")
但我不知道哪个显示器当前处于“活动”状态


有什么想法吗?

Applescript无法访问光标位置,即使是通过系统事件。对不起

[有几个商业解决方案,但我猜它们不值得在这种情况下麻烦?我想我还可以快速创建一个命令行工具,只返回当前光标位置……值得麻烦吗?]

p、 美国awk非常擅长寻找匹配的线条:

set screenWidth to (do shell script "system_profiler SPDisplaysDataType | awk '/Resolution/{print $2}'")

为了完整起见,以下是获取屏幕高度的代码:

do shell script "system_profiler SPDisplaysDataType | awk '/Resolution/{print $4}'"}
这就是诀窍:

tell application "Finder"
set screen_resolution to bounds of window of desktop
end tell

以下内容并不能解决OP的问题,但可能有助于那些想要确定AppleScript中所有连接显示器的分辨率的人(感谢@JoelReid和@iloveitaly的构建块):


为了更加完整,下面是获取特定显示器(主显示器或内置显示器)的宽度、高度和视网膜比例的代码

这是获取内置显示器分辨率和视网膜比例的代码:

set {width, height, scale} to words of (do shell script "system_profiler SPDisplaysDataType | awk '/Built-In: Yes/{found=1} /Resolution/{width=$2; height=$4} /Retina/{scale=($2 == \"Yes\" ? 2 : 1)} /^ {8}[^ ]+/{if(found) {exit}; scale=1} END{printf \"%d %d %d\\n\", width, height, scale}'")
set {width, height, scale} to words of (do shell script "system_profiler SPDisplaysDataType | awk '/Main Display: Yes/{found=1} /Resolution/{width=$2; height=$4} /Retina/{scale=($2 == \"Yes\" ? 2 : 1)} /^ {8}[^ ]+/{if(found) {exit}; scale=1} END{printf \"%d %d %d\\n\", width, height, scale}'")
这是获取主显示器分辨率和视网膜比例的代码:

set {width, height, scale} to words of (do shell script "system_profiler SPDisplaysDataType | awk '/Built-In: Yes/{found=1} /Resolution/{width=$2; height=$4} /Retina/{scale=($2 == \"Yes\" ? 2 : 1)} /^ {8}[^ ]+/{if(found) {exit}; scale=1} END{printf \"%d %d %d\\n\", width, height, scale}'")
set {width, height, scale} to words of (do shell script "system_profiler SPDisplaysDataType | awk '/Main Display: Yes/{found=1} /Resolution/{width=$2; height=$4} /Retina/{scale=($2 == \"Yes\" ? 2 : 1)} /^ {8}[^ ]+/{if(found) {exit}; scale=1} END{printf \"%d %d %d\\n\", width, height, scale}'")

代码基于Jessi Baughman和此处给出的其他答案。

在我的机器上
system_profiler
几乎需要一秒钟才能返回回复。就我而言,那样太久了

在10.12之前,我使用了ASObjC Runner,但显然这已经不起作用了

这对我来说要快得多:

告诉应用程序“Finder”获取桌面窗口的边界


(取自)

获取所有监视器的宽度、高度和缩放比例(视网膜=2,else=1):

set resolutions to {}
repeat with p in paragraphs of ¬
    (do shell script "system_profiler SPDisplaysDataType | awk '/Resolution:/{ printf \"%s %s %s\\n\", $2, $4, ($5 == \"Retina\" ? 2 : 1) }'")
    set resolutions to resolutions & {{word 1 of p as number, word 2 of p as number, word 3 of p as number}}
end repeat

get resolutions
基于

结果如下:

{{2304, 1440, 2}, {1920, 1080, 1}}

对于多个显示器,
bounds of window of desktop
根据系统首选项中定义的空间排列,报告单个组合大小,即围绕所有显示器的矩形。换言之:您无法知道有多少个显示,报告的矩形可能包含实际上不可显示的区域。类似地,标准套件<代码>窗口对象(通过<代码>边界)和Process Suite<代码>窗口对象(通过<代码>位置的上下文<代码>“系统事件”)都以这个组合矩形的形式报告它们的坐标。这基本上很好,并且得到了一个向上的投票。我的脚本创建了两个查找窗口并并排显示,就像Norton Commander一样。但如果我将外置显示器连接到Macbook,它将使用外置显示器的分辨率。外部显示器配置为辅助屏幕(且不镜像)。有没有一个线索总是参考内部屏幕?这是伟大的,你能想出一个方法或知道哪是活动桌面?我在考虑寻找一种方法来知道哪个桌面是活动窗口sitting@perrohunter我不知道如何单独在AppleScript中实现这一点。虽然您可以按如下方式获取最前面应用程序活动窗口的边界:
应用程序第一个窗口的边界(以文本形式指向最前面应用程序的路径)
,但这些边界以包含所有显示的虚拟矩形的形式报告,如
Finder
上下文中桌面窗口的
边界所报告。如果不知道显示器的排列方式(垂直、水平、向左、向右等),您将无法推断具体的显示器。我必须将结果设置为一个变量,然后在“告诉应用程序”块之外使用它:告诉应用程序“查找器”将尺寸设置为(do shell…end告诉设置宽度到尺寸的第1项设置高度到尺寸的第2项所有关于applescript的回答都是错误的,因为它们将多个显示器添加在一起。所有关于system_profiler的回答都是错误的,因为有效视网膜分辨率可能与上面所说的不同。