Получение разрешения экрана и положения / смещения от OSX - PullRequest
2 голосов
/ 12 октября 2010

Я пытаюсь прочитать разрешения и позиции текущего подключенного экрана. Например, если бы у меня было подключено 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 ]

2 голосов
/ 12 октября 2010

Официальный 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
}

0-я запись массива [NSScreen screens] гарантированно будет основным экраном, то есть со строкой главного меню.

Использование какаометоды из Python должны быть простыми, хотя я не знаю: p Из командной строки

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

указали размеры экрана ... хотя я не до конца понимаю, как работает мостовое соединение.Читайте официальный документ !

0 голосов
/ 12 октября 2010

Я не знаю о Python, но, поскольку вы сказали, что заинтересованы в каких-либо решениях, вы можете сделать это на Java с помощью GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices(). Это вернет массив экранов, которые вы можете просмотреть и получить различные свойства. Например, вы можете напечатать ширину и высоту первого экрана, выполнив что-то вроде следующего:

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

Очевидное преимущество выполнения этого в конструкциях любого языка, который вы выбираете вместо анализа системного файла, состоит в том, что он должен быть переносимым, но это может не иметь значения для вас, поскольку вы специально запросили OS X.

РЕДАКТИРОВАТЬ: Я только что прочитал, что .getScreenDevices () не гарантирует, что массив будет заполнен в каком-то определенном порядке (в отношении положения экрана), поэтому это может не полностью соответствовать вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...