2010-06-10 5 views
8

В дюймах, например. 21 '. Приложение является стандартным приложением WinForms.Есть ли способ определить физический размер монитора?

EDIT: Кажется, что на самом деле нет надежного способа выполнить то, что мне нужно.

+1

Название забыли упомянуть, что OP хочет получить физический размер изображения монитора (в дюймах), а не разрешение рабочего стола в квадратных пикселях. –

+0

@Andreas Ваше предложение добавлено – AngryHacker

+0

Я мог бы легко дать вам размер пикселя, но вот и все ... –

ответ

2

Я имею в виду два пути, которые могли бы работать в особых условиях:

  • попытаться получить имя аппаратного монитора. В моей системе с двумя мониторами я использую один SyncMaster 205BW и один SyncMaster 173T. Это 20 "и 17" мониторы. Вы понимаете, что я имею в виду? Одна из проблем, однако, заключается в том, что я не уверен, что вы программно можете получить эти строки. Windows появляется только для получения SyncMaster: screenres.png.

  • Вы можете использовать GetDeviceCaps(GetDC(GetDesktopWindow), VERTSIZE) для получения «Высота в миллиметрах от физического экрана». и аналогично HORZSIZE и «ширина». Но это будет работать, только если вы откалибровали свой дисплей. По крайней мере, в моей системе значения намного больше фактической высоты и ширины ...

  • Я понятия не имею о вашем контексте, но если вашему приложению действительно нужен физический размер устройства вывода конечного пользователя , почему не спросить ему? Вы можете легко запросить размер монитора во время настройки (например, используя отличную программу Inno Setup) и сохранить значение в реестре. Тогда тривиально написать процедуру GetPhysicalMonitorSize, которая просто считывает значение из реестра.

1

Если нет специфичного для .NET способа, вы всегда можете использовать собственный Windows API: GetSystemMetrics с SM_CYSCREEN или SM_CXSCREEN.

+0

GetSystemMetrics возвращает только такие вещи, как разрешение. Я хочу размер монитора (например, монитор 21 '). – AngryHacker

+0

@AngryHacker: О, это звучит намного сложнее ... –

+6

Это * * намного сложнее, для значений 'трудно == невозможно' –

2

Веб-приложение или настольное приложение? Все, что вы можете узнать о веб-приложение является разрешение браузера экрана, с помощью JavaScript:

<script language="javascript"> 

var width = screen.width; 
var height = screen.height; 

if(width < 1280 || height < 1024) 
{ 
    alert("This web page is best viewed with a screen resolution of 1280 by 1024 or higher. Your current resolution is " + width + " by " + height + ". If possible please change your resolution."); 
} 
else 
{ 
    alert("Your screen resolution is pretty big!") 
} 
</script> 

Для настольного приложения, вы делаете это:

MessageBox.Show("Monitor Size:" + 
    SystemInformation.PrimaryMonitorSize); 
5

Это не может быть гарантирована. Windows не может знать размер монитора, если его драйвер не допросит его и не сообщит об ответах на окна.

Однако, вы можете попробовать

SystemInformation.PrimaryMonitorSize 

или GetDeviceCaps(dc, HORZSIZE) и GetDeviceCaps(dc, VERTSIZE), а затем calulate квадрат на гипотенузе.

Обратите внимание, что существует также accepted answer для идентичного вопроса прямо здесь, в разделе Переполнение стека.

2

Вы можете использовать EDID в реестре для получения физического размера экрана. Драйвер монитора сообщает размер физического экрана для Windows.

Смежные вопросы