Есть ли способ определить физический размер монитора?

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

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

5 ответов


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

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

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

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


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

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

SystemInformation.PrimaryMonitorSize

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

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


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

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


Если нет .NET-конкретного способа, вы всегда можете использовать собственный API Windows:GetSystemMetrics С SM_CYSCREEN или SM_CXSCREEN.