我正在开发一个VB应用程序,我需要知道监视器的原始分辨率而不是用户设置的分辨率(当前分辨率).所以我需要直接从监视器读取EDID(扩展显示识别数据).
我确实试图通过一些程序找到监视器的分辨率......但它返回的只是当前的分辨率.任何帮助直接从监视器的EDID读取信息是有用的.
提前致谢
经过大量的研究,我能够解决我的问题..感谢有价值的信息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的起始字节.
horizontalRes =((edid [dtd + 4] >> 4)<< 8)| edid [dtd + 2] verticalRes =((edid [dtd + 7] >> 4)<< 8)| edid [dtd + 5] res =(horizontalRes,verticalRes)`
获得的值是十六进制值,可以将其转换为十进制以查找以像素为单位的NATIVE RESOLUTION.
谢谢希望它有助于萨钦