2010-10-12 100 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