获得屏幕分辨率&来自OSX的位置/偏移

时间:2010-10-12 14:37:24

标签: macos

我正在尝试阅读这些决议&当前连接屏幕的位置。例如,如果我连接了2个屏幕,我可能会得到像......这样的信息。

Screen 1, 1920*1080, x:0, y:0 Screen 2, 1280*1024, x:1920, y:0

从我自己的笨拙研究中,我认为/Library/Preferences/com.apple.windowserver.plist可能有我正在寻找的东西,但它似乎包含的信息比连接的屏幕更多,我不能看一种方法来分辨哪个是哪个。

理想情况下,我想通过Python获取此信息,但有兴趣听取任何解决方案。

我来自Windows背景,所以如果我的事情出错可能是为什么

非常感谢!

2 个答案:

答案 0 :(得分:2)

官方API为NSScreen。在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()

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

答案 1 :(得分:0)

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

System.out.println(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getWidth() + "x" + GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getHeight());

在您选择的任何语言的构造中执行此操作的明显优势,而不是通过解析系统文件,它应该是可移植的,但这可能对您没有关系,因为您特别请求了OS X.

编辑:我刚刚读到.getScreenDevices()并不保证将以任何特定顺序(就屏幕位置而言)填充数组,因此这可能无法完全满足您的需求。