我正在尝试阅读这些决议&当前连接屏幕的位置。例如,如果我连接了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背景,所以如果我的事情出错可能是为什么
非常感谢!
答案 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()并不保证将以任何特定顺序(就屏幕位置而言)填充数组,因此这可能无法完全满足您的需求。