有没有办法确定显示器的物理尺寸?

时间:2010-06-10 23:50:28

标签: c# visual-studio-2008

以英寸为单位,例如21'监视器。该应用程序是一个标准的WinForms应用程序。

编辑:似乎没有一种可靠的方法可以实现我的需要。

5 个答案:

答案 0 :(得分:5)

这不能保证。 Windows无法知道监视器的大小,除非其驱动程序询问它并报告对窗口的回复。

但是,您可能想尝试

SystemInformation.PrimaryMonitorSize

GetDeviceCaps(dc, HORZSIZE)GetDeviceCaps(dc, VERTSIZE)然后计算斜边上的方块。

请注意,Stack Overflow上还有一个accepted answer相同的问题。

答案 1 :(得分:2)

网络应用或桌面应用?您可以使用javascript:

了解有关Web应用程序的所有内容,即浏览器的屏幕分辨率
<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 );

答案 2 :(得分:2)

我正在考虑在特殊情况下可能有两种方法:

  • 尝试获取监视器硬件的名称。在我的双显示器系统上,我使用一个SyncMaster 205BW和一个SyncMaster 173T。这些是20“和17”显示器。你明白我的意思吗?但是,一个问题是,我不确定您是否可以通过编程方式获取这些字符串。 Windows似乎只获得SyncMaster:screenres.png

  • 您可以使用GetDeviceCaps(GetDC(GetDesktopWindow), VERTSIZE)获取“物理屏幕的高度,以毫米为单位”。和HORZSIZE以及“宽度”类似。但是,只有你校准了显示器才会有效,我相信。至少在我的系统上,这些值比实际的高度和宽度要大得多......

  • 我不知道您的上下文,但如果您的应用确实需要最终用户输出设备的物理尺寸,为什么不询问他?您可以在设置期间轻松询问显示器的大小(例如,使用优秀的Inno设置),并将值存储在注册表中。然后编写一个简单地从注册表中读取值的过程GetPhysicalMonitorSize是微不足道的。

答案 3 :(得分:2)

您可以使用注册表中的EDID来获取物理屏幕大小。显示器的驱动程序将物理屏幕大小报告给Windows。

答案 4 :(得分:1)

如果没有特定于.NET的方式,您始终可以使用原生Windows API:GetSystemMetrics SM_CYSCREENSM_CXSCREEN