2012-04-09 42 views
2

我正在開發一個VB應用程序,我需要知道顯示器的原始分辨率,而不是用戶設置的分辨率(當前分辨率)。所以我需要直接從顯示器讀取EDID(擴展顯示標識數據)。如何從EDID文件通過VB6.0獲取附加顯示器的NATIVE分辨率?

我也試圖通過一些程序來發現顯示器的分辨率......但所有它返回的是當前的分辨率。直接從顯示器的EDID讀取信息的任何幫助都很有用。

預先感謝

回答

1

對於一些源代碼(儘管C/C++)來讀取EDID塊見點5在this link。唯一的官方手段通過Windows Setup API檢索這些信息。

對於EDID格式描述參見例如here

+0

@ yahia..Thanku所以MCH :) – 2012-04-25 12:55:29

+1

@SachinVerma你歡迎:-) – Yahia 2012-04-25 13:11:51

6

了大量的研究後,我能解決我的問題.. 感謝您的寶貴信息葉海亞。

首先,我們需要找到EDID數據。物理顯示信息事實上可通過擴展顯示標識數據(EDID)提供給操作系統。 EDID塊的副本保存在Windows註冊表中。但問題是要獲得正確的EDID,因爲註冊表中存儲了有關所有監視器的信息,這些監視器在任何時間點都已連接到系統。因此,首先我們使用WMI類「Win32_DesktopMonitor」,並通過簡單的SQL查詢獲取PNP設備ID,以查找可用(不離線)的監視器。然後我們可以深入到註冊表中查找數據。

` '在wmiquery監視器(' 選擇從Win32_DesktopMonitor * '):

REGKEY =(' HKLM \系統\ CurrentControlSet \枚舉\」 + monitor.PNPDeviceID + '\設備參數\ EDID') EDID = get_regval(REGKEY)'`

其次,它是必要的解析數據。顯示器的基本EDID信息在包含相關製造商和操作相關數據的128字節數據結構內傳輸。這些信息大部分對我們來說並不感興趣。

要知道原始分辨率,我們需要開始尋找在開始於字節= 54

繼DTD(詳細時間描述符)是一個尋找從EDID

'的最大分辨率邏輯dtd = 54#詳細時序描述的開始字節。水平分辨率=((edid [dtd + 4] >> 4)< < 8)| EDID [DTD + 2] verticalRes =((EDID [DTD + 7] >> 4)< < 8)| edid [dtd + 5] res =(horizo​​ntalRes,verticalRes)`

獲得的值是十六進制值,可以將其轉換爲十進制值以查找以像素爲單位的原始分辨率。

感謝 希望它可以幫助 薩欽

+1

嘿,在尋找答案數週,甚至數月之後,這對我有所幫助。我也想知道如何從EDID獲得確切的刷新率,而維基百科頁面並沒有很好地解釋這一點。你有沒有可能做到這一點? – NmdMystery 2014-11-12 03:39:43

+0

@NmdMystery:我很高興它有幫助。不,我沒有看過EDID的刷新率。 – 2016-02-08 13:57:30

1

「這是除實際設定的分辨率一切的完整解決方案。這將從活動監視器的EDID中讀出原始分辨率設置。

集的WshShell = WScript.CreateObject( 「WScript.Shell」)

CONST HKEY_LOCAL_MACHINE = & H80000002 CONST DTD_INDEX = 54

將strComputer = 「」

設置objWMIService = GetObject的( 「winmgmts:\」 & strComputer的& 「\ ROOT \ CIMV2」) 設置OREG = GetObject的( 「winmgmts:{impersonationLevel =冒充} \」 & strComputer的&「\ ROOT \默認:的StdRegProv 「)

設置colItems的= objWMIService.ExecQuery(」 從Win32_DesktopMonitor選擇*」 ,, 48) 對於每個objItem在colItems的「獲取活動監視器EDID註冊表路徑 strKeyPath的= 「系統\ CurrentControlSet \枚舉\」 & objItem .PNPDeviceID &「\ Device Parameters」
下一頁

oReg.GetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath的, 「EDID」,arrRawEDID

hor_resolution = arrRawEDID(DTD_INDEX + 2)+(arrRawEDID(DTD_INDEX + 4)和240)* 16 vert_resolution = arrRawEDID(DTD_INDEX + 5)+(arrRawEDID(DTD_INDEX + 7)和240)* 16

WshShell.Run 「res.exe」 & hor_resolution & 「」 & vert_resolution