В дюймах, например. 21 '. Приложение является стандартным приложением WinForms.Есть ли способ определить физический размер монитора?
EDIT: Кажется, что на самом деле нет надежного способа выполнить то, что мне нужно.
В дюймах, например. 21 '. Приложение является стандартным приложением WinForms.Есть ли способ определить физический размер монитора?
EDIT: Кажется, что на самом деле нет надежного способа выполнить то, что мне нужно.
Я имею в виду два пути, которые могли бы работать в особых условиях:
попытаться получить имя аппаратного монитора. В моей системе с двумя мониторами я использую один SyncMaster 205BW и один SyncMaster 173T. Это 20 "и 17" мониторы. Вы понимаете, что я имею в виду? Одна из проблем, однако, заключается в том, что я не уверен, что вы программно можете получить эти строки. Windows появляется только для получения SyncMaster: screenres.png.
Вы можете использовать GetDeviceCaps(GetDC(GetDesktopWindow), VERTSIZE)
для получения «Высота в миллиметрах от физического экрана». и аналогично HORZSIZE
и «ширина». Но это будет работать, только если вы откалибровали свой дисплей. По крайней мере, в моей системе значения намного больше фактической высоты и ширины ...
Я понятия не имею о вашем контексте, но если вашему приложению действительно нужен физический размер устройства вывода конечного пользователя , почему не спросить ему? Вы можете легко запросить размер монитора во время настройки (например, используя отличную программу Inno Setup) и сохранить значение в реестре. Тогда тривиально написать процедуру GetPhysicalMonitorSize
, которая просто считывает значение из реестра.
Если нет специфичного для .NET способа, вы всегда можете использовать собственный Windows API: GetSystemMetrics
с SM_CYSCREEN
или SM_CXSCREEN
.
GetSystemMetrics возвращает только такие вещи, как разрешение. Я хочу размер монитора (например, монитор 21 '). – AngryHacker
@AngryHacker: О, это звучит намного сложнее ... –
Это * * намного сложнее, для значений 'трудно == невозможно' –
Веб-приложение или настольное приложение? Все, что вы можете узнать о веб-приложение является разрешение браузера экрана, с помощью 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);
Это не может быть гарантирована. Windows не может знать размер монитора, если его драйвер не допросит его и не сообщит об ответах на окна.
Однако, вы можете попробовать
SystemInformation.PrimaryMonitorSize
или GetDeviceCaps(dc, HORZSIZE)
и GetDeviceCaps(dc, VERTSIZE)
, а затем calulate квадрат на гипотенузе.
Обратите внимание, что существует также accepted answer для идентичного вопроса прямо здесь, в разделе Переполнение стека.
Вы можете использовать EDID в реестре для получения физического размера экрана. Драйвер монитора сообщает размер физического экрана для Windows.
Название забыли упомянуть, что OP хочет получить физический размер изображения монитора (в дюймах), а не разрешение рабочего стола в квадратных пикселях. –
@Andreas Ваше предложение добавлено – AngryHacker
Я мог бы легко дать вам размер пикселя, но вот и все ... –