2010-04-08 171 views
13

我试图检索显示器ID的显示在Windows显示属性(#1,2 ...等),但我似乎无法找到一种方法。我曾尝试使用EnumDisplayMonitors以及EnumDisplayDevices。他们都返回类似“\。\ DISPLAY1”。但是,这个数字并不总是与Windows显示的数字相匹配,特别是当使用2个视频卡驱动3个或更多显示器时。是否有我缺少的API调用来检索此信息,还是有办法从注册表或其他位置获取它?谢谢!如何检索显示器信息?

我曾尝试以下方法:
的Win32: EnumDisplayMonitors,EnumDisplayDevices:无论这些返回显示器是不活跃的,并没有一个返回正确的ID。
WMI:“select * from Win32_DesktopMonitor”不返回所有监视器,也没有ID。
注册表:我已经找到了各种位置的显示器,我发现没有任何地方有我正在寻找的信息。

任何帮助,非常感谢。 :)

更新:这些显示器的数字我要找: alt text

+1

老问题,有没有找到答案? – 2011-11-01 21:33:12

+1

有人找到解决方案吗? – flashk 2012-05-02 16:05:28

+1

@JoelBarsotti,你解决了这个问题吗? – 2017-05-03 08:39:31

回答

0

只是一个猜测,但它看起来像Windows显示在Windows的显示属性iDevNum+1

+0

不幸的是,情况并非如此,那太容易了。 :)如果您有双显示器系统,请尝试将#2设为主设备并禁用#1。在显示属性窗口中#2仍然被称为数字2,但它将是EnumDisplayDevices(iDevNum 0)返回的第一个监视器。 :( – 2010-04-08 20:00:23

+0

此外,由EnumDisplayMonitors返回的监视器的顺序看起来是随机的,大多数情况下它会按照相同的顺序返回它们,但是如果你有2个显卡驱动3个显示器,它可以改变。 – 2010-04-08 20:02:37

+0

This lead我下了正确的道路,但对Windows 7来说是不正确的。 – 2010-04-11 02:43:04

1

根据目的,您可能需要考虑基于驱动程序的解决方案。我知道nVidia有一些不错的库,可以让你访问控制面板上的大部分功能。

+0

这是一个有趣的想法,但我需要更通用的东西,不能依赖于特定的驱动程序。 – 2010-04-09 18:57:26

1

你有两次调用EnumDisplayDevices吗?尝试像这样:

while (EnumDisplayDevices(0, dev, &dd, 0)) 
{ 
... 
    while (EnumDisplayDevices(dd.DeviceName, devMon, &ddMon, 0)) 
    { 
    ... 
    } 
} 
+0

我已经这样做了,但监视器号码返回的位置在哪里? – 2010-04-09 18:56:15

+0

监视器号码是什么意思?如果提到“devMon”,那么从devMon = 0开始,并在内部“while”中设置devMon ++。 – VitalyVal 2010-04-09 21:38:51

+0

我已经更新了我正在寻找的显示器号码的图片。 – 2010-04-10 00:30:03