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

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

编辑:似乎真的没有一种可靠的方法来完成我的需要。

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

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

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

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

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

但是,您可能想尝试一下

 SystemInformation.PrimaryMonitorSize 

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

请注意,Stack Overflow上的相同问题也有一个可接受的答案 。

网络应用或桌面应用? 您可以使用javascript找到有关Web应用程序的所有内容:浏览器的屏幕分辨率:

  

对于桌面应用,您可以执行以下操作:

 MessageBox.Show( "Monitor Size:" + SystemInformation.PrimaryMonitorSize ); 

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

如果没有特定于.NET的方法,则始终可以使用本机Windows API:带有SM_CYSCREENSM_CXSCREEN GetSystemMetrics