2010-06-10 64 views
8

以英寸为单位,例如21'监视器。该应用程序是一个标准的WinForms应用程序。有没有办法确定显示器的物理尺寸?

编辑:它似乎真的不是一种可靠的方式来完成我所需要的。

+1

标题忘了提及OP希望显示器图像的物理尺寸(以英寸为单位),而不是以平方像素为单位的桌面分辨率。 – 2010-06-11 00:00:51

+0

@Andreas您的建议添加了 – AngryHacker 2010-06-11 00:02:22

+0

我可以很容易地给你像素大小,但是,这就是全部...... – 2010-06-11 00:14:44

回答

2

我想到两个方法,可能在特殊条件下工作:

  • 试图让显示器硬件的名称。在我的双显示器系统上,我使用了一台SyncMaster 205BW和一台SyncMaster 173T。这些是20“和17”显示器。你明白我的意思吗?然而,一个问题是,我不确定你是否可以通过编程获得这些字符串。 Windows似乎只能获得SyncMaster:screenres.png。您可以使用GetDeviceCaps(GetDC(GetDesktopWindow), VERTSIZE)来获得“物理屏幕的高度,以毫米为单位”。并且与HORZSIZE和“宽度”类似。但是,如果你已经校准了你的显示器,我相信这只会起作用。至少在我的系统中,这些值远远大于实际的高度和宽度...

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

1

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

+0

GetSystemMetrics只会带回像分辨率这样的东西我想要显示器的尺寸(例如21'显示器) – AngryHacker 2010-06-10 23:56:20

+0

@AngryHacker:哦,这听起来更加困难... – 2010-06-10 23:59:48

+6

那*对于'困难==不可能'的价值来说,要困难得多 – 2010-06-11 00:05:49

2

Web应用程序或桌面应用程序?所有你可以了解Web应用程序是浏览器的屏幕分辨率,使用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); 
5

这不能保证。 Windows不能知道显示器的大小,除非其驱动程序询问它并将回复报告给窗口。

然而,你可能想尝试

SystemInformation.PrimaryMonitorSize 

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

请注意,也有一个accepted answer相同的问题在这里堆栈溢出。

2

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

相关问题