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

Ang*_*ker 8 c# visual-studio-2008

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

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

Maw*_*awg 5

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

但是,您可能想尝试一下

SystemInformation.PrimaryMonitorSize
Run Code Online (Sandbox Code Playgroud)

GetDeviceCaps(dc, HORZSIZE)GetDeviceCaps(dc, VERTSIZE),然后calulate上斜边的平方.

请注意,Stack Overflow上也存在对相同问题的接受答案.


And*_*and 2

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

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

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

  • \n
  • 我不知道你的背景,但如果你的应用程序确实需要最终用户输出设备的物理尺寸,为什么不他呢?您可以在安装过程中轻松询问显示器的尺寸(例如使用出色的 Inno Setup),并将该值存储在注册表中。然后编写一个简单GetPhysicalMonitorSize地从注册表中读取值的过程就很简单了。

  • \n
\n