2010-10-12 96 views
2

我在尝试读取当前连接屏幕的分辨率&位置。例如,如果我有2个屏幕连接,我可能得到的信息一样......从OSX获取屏幕分辨率和位置/偏移量

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

此官方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方法应该很容易,虽然我不知道:对在命令行中,

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

了屏幕尺寸...虽然我不完全了解桥接作品。阅读the official doc

+0

非常感谢,正是我在找的。似乎我很困惑自己试图通过appScript与appscript做到这一点。 – 2010-10-13 08:09:51

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()不保证该阵列将在任何特定的顺序来填充(关于屏幕位置),所以这可能不完全适合您的需求。

+0

有趣的是,这也会给我屏幕的偏移吗?如同告诉我屏幕相对于彼此的位置?这是我无法控制的主要问题。如在,我可以告诉如果第二个显示器是对齐的第一个等右下角等像素精度? – 2010-10-12 15:59:19

+0

不,请参阅我的编辑 - 对于该信息,我怀疑你将不得不解析某种类型的系统文件。不幸的是,我不知道在哪里看。 – 2010-10-12 16:33:42