2013-02-20 193 views
0

我有一个程序,用户选择目标显示器,但我不能得到真正的显示器 名称/型号。获取精确的显示器/显示/屏幕名称

我已经试过如下:

  • Screen.AllScreens是没有用的;
  • WMI和Win32 EnumDisplayDevices都返回Generic PnP Monitor;
  • 设备管理器也显示了通用即插即用监视器...

在资源管理器中有连接的显示器,并在珠峰实际的名称,它显示细节更加深入......

从哪里这些2个程序获取这些信息?我遇到的最后一个选项 是从注册表中解析EDID ...有没有人试过这个,并做到了这一点?

+4

在你得意忘形有了这个,你将如何处理这两个显示器完全相同的品牌和型号的非常常见的情况? – 2013-02-20 20:18:39

+0

我并不担心这一点......我想,我可以根据屏幕边界确定屏幕的位置,例如。左边,右边等。如果只有两个,我可以将主要附加到主要的一个。但在我掌握这些之前,我必须先获得这些信息。 – DavorinP 2013-02-20 21:00:28

+0

可能的重复[如何获取实际的监视器名称?如解析对话框中所示](http://stackoverflow.com/questions/4958683/how-do-i-get-the-actual-monitor-name-as-seen-in-the-resolution-dialog) – 2015-01-31 23:45:39

回答

3

嗯,这个问题是旧的,然而,作为谷歌的重定向起见,我建议“WindowsDisplayAPI”库。

https://www.nuget.org/packages/WindowsDisplayAPI


使用图书馆,有很多种方法获得的显示名称。最简单的方法是:

foreach (var display in Display.GetDisplays()) 
{ 
    Console.WriteLine(display.DeviceName); 
} 

但是这是使用旧的API,如果你确信你的程序的目标至少是Windows Vista,我建议如下代码:

foreach (var target in DisplayConfig.PathDisplayTarget.GetDisplayTargets()) 
{ 
    Console.WriteLine(target.FriendlyName); 
}