2010-04-08 80 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