Macos 获取屏幕分辨率&;与OSX的位置/偏移

Macos 获取屏幕分辨率&;与OSX的位置/偏移,macos,Macos,我正在尝试读取当前连接屏幕的分辨率和位置。例如,如果我连接了两个屏幕,我可能会得到如下信息 屏幕11920*1080,x:0,y:0 屏幕2,1280*1024,x:1920,y:0 根据我自己的拙劣研究,我认为/Library/Preferences/com.apple.windowserver.plist可能有我想要的东西,但它似乎包含的屏幕信息比连接的屏幕多,而且我看不到区分哪个是哪个的方法 理想情况下,我希望通过Python获得这些信息,但对听到任何解决方案都感兴趣 我来自Windows

我正在尝试读取当前连接屏幕的分辨率和位置。例如,如果我连接了两个屏幕,我可能会得到如下信息

屏幕11920*1080,x:0,y:0
屏幕2,1280*1024,x:1920,y:0

根据我自己的拙劣研究,我认为/Library/Preferences/com.apple.windowserver.plist可能有我想要的东西,但它似乎包含的屏幕信息比连接的屏幕多,而且我看不到区分哪个是哪个的方法

理想情况下,我希望通过Python获得这些信息,但对听到任何解决方案都感兴趣

我来自Windows背景,所以如果我以错误的方式处理问题,这可能就是原因


非常感谢

我不知道Python中有什么,但是既然你说你对任何解决方案都感兴趣,那么你可以用Java中的
GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()
来实现这一点。这将返回一个屏幕数组,您可以在其中循环并获取屏幕的各种属性。例如,您可以通过执行以下操作打印第一个屏幕的宽度和高度:

System.out.println(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getWidth() + "x" + GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getHeight());
在您选择的任何语言的构造中执行此操作而不是解析系统文件的明显优势在于,它应该是可移植的,但这对您来说可能并不重要,因为您专门请求了OSX


编辑:我刚刚读到。getScreenDevices()不能保证数组将按任何特定顺序(相对于屏幕位置)填充,因此这可能不完全适合您的需要。

这方面的官方API是。在Objective-C中,您使用

NSArray*screens=[NSScreen screens];
for(NSScreen*screen in screens){
     NSRect frame=[screen frame];
     // frame.origin.{x,y} and frame.size.{height,width} contains the info you want
}
阵列
[NSScreen screens]
的第0个条目保证是主屏幕,即使用主菜单栏

使用Python中的Cocoa方法应该很容易,尽管我不知道:p来自命令行

$ python
>>> from AppKit import *
>>> NSScreen.screens()[0].frame()

给出了屏幕尺寸。。。虽然我不完全理解桥接是如何工作的。读

有趣的是,这会给我屏幕的偏移量吗?如中所示,请告诉我屏幕相对显示的位置?这是我找不到的最主要的一点。如中所示,我是否可以判断第二个监视器是否与第一个etc的右下角对齐,并具有像素精度?不,请参阅我的编辑-有关该信息,我怀疑您最终必须解析某种类型的系统文件。不幸的是,我不知道去哪里找。非常感谢,这正是我要找的。似乎我在试图通过applescript和appscript来实现这一点时把自己弄糊涂了。