Есть ли способ определить физический размер монитора? - PullRequest
8 голосов
/ 11 июня 2010

В дюймах, например, 21 'монитор.Приложение является стандартным приложением WinForms.

РЕДАКТИРОВАТЬ: кажется, действительно нет надежного способа выполнить то, что мне нужно.

Ответы [ 5 ]

5 голосов
/ 11 июня 2010

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

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

SystemInformation.PrimaryMonitorSize

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

Обратите внимание, что здесь, на переполнении стека, есть принятый ответ на идентичный вопрос.

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

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

2 голосов
/ 11 июня 2010

Я думаю о двух способах работы в особых условиях:

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

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

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

2 голосов
/ 11 июня 2010

Веб-приложение или настольное приложение?Все, что вы можете узнать о веб-приложении, это разрешение экрана браузера, используя 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>

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

1 голос
/ 11 июня 2010

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

...