以英寸为单位,例如21英寸的显示器。该应用程序是一个标准的WinForms应用程序。
编辑:看起来没有可靠的方法可以完成我需要的功能。
以英寸为单位,例如21英寸的显示器。该应用程序是一个标准的WinForms应用程序。
编辑:看起来没有可靠的方法可以完成我需要的功能。
这是无法保证的。除非驱动程序对显示器进行查询并将答复报告给Windows,否则Windows无法知道显示器的大小。
不过,您可以尝试
SystemInformation.PrimaryMonitorSize
或者 GetDeviceCaps(dc, HORZSIZE)
和 GetDeviceCaps(dc, VERTSIZE)
,然后计算斜边上的平方。
请注意,这里在 Stack Overflow 上也有一个相同问题的 接受答案。
网页应用或桌面应用?关于网页应用的所有信息,你只能通过使用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 );
我考虑了两种在特殊条件下可能有效的方法:
尝试获取显示器硬件名称。在我的双显示器系统中,我使用一个SyncMaster 205BW和一个SyncMaster 173T。这些分别是20英寸和17英寸的显示器。你明白我的意思吗?然而,有一个问题,我不确定你是否可以通过编程方式获取这些字符串。Windows似乎只能获取SyncMaster:screenres.png。
您可以使用GetDeviceCaps(GetDC(GetDesktopWindow), VERTSIZE)
来获取“物理屏幕高度(以毫米为单位)”,并类似地使用HORZSIZE
和“宽度”。但我认为,这仅适用于您已经校准了显示器。至少在我的系统上,这些值比实际高度和宽度大得多...
我不知道您的上下文是什么,但如果您的应用程序确实需要最终用户输出设备的物理大小,为什么不询问他呢?您可以在设置期间轻松询问显示器的尺寸(例如使用优秀的Inno Setup),并将该值存储在注册表中。然后,编写一个简单的过程GetPhysicalMonitorSize
,它只需从注册表中读取该值即可。
您可以使用注册表中的EDID来获取物理屏幕大小。显示器的驱动程序将物理屏幕大小报告给Windows。