如何通过VB6.0从EDID文件中获取附加监视器的NATIVE分辨率?

Sac*_*rma 2 vb6

我正在开发一个VB应用程序,我需要知道监视器的原始分辨率而不是用户设置的分辨率(当前分辨率).所以我需要直接从监视器读取EDID(扩展显示识别数据).

我确实试图通过一些程序找到监视器的分辨率......但它返回的只是当前的分辨率.任何帮助直接从监视器的EDID读取信息是有用的.

提前致谢

Sac*_*rma 6

经过大量的研究,我能够解决我的问题..感谢有价值的信息Yahia.

首先,我们需要找到EDID数据.事实上,物理显示信息可通过扩展显示识别数据(EDID)提供给OS.EDID块的副本保存在Windows注册表中.但问题是获得正确的EDID,因为注册表存储了关于所有监视器的信息,这些监视器在任何时候都附加到系统.因此,首先我们使用WMI类"Win32_DesktopMonitor",并通过简单的SQL查询获取PNP设备ID以查找可用的监视器(非脱机).然后我们可以深入了解注册表以查找数据.

`'用于wmiquery中的监视器('Select*from Win32_DesktopMonitor'):

regkey =('HKLM\SYSTEM\CurrentControlSet\Enum \'+ monitor.PNPDeviceID +'\ Device Parameters\EDID')edid = get_regval(regkey)'`

其次,有必要解析数据.显示器的基本EDID信息在包含相关制造商和操作相关数据的128字节数据结构内传送.大部分信息对我们来说都无趣.

要知道NATIVE分辨率,我们需要开始查看从byte = 54开始的DTD(详细时序描述符).

以下是从EDID中找到最大分辨率的逻辑

`dtd = 54#详细时序desc的起始字节.

horizo​​ntalRes =((edid [dtd + 4] >> 4)<< 8)| edid [dtd + 2] verticalRes =((edid [dtd + 7] >> 4)<< 8)| edid [dtd + 5] res =(horizo​​ntalRes,verticalRes)`

获得的值是十六进制值,可以将其转换为十进制以查找以像素为单位的NATIVE RESOLUTION.

谢谢希望它有助于萨钦