一、简介
最近写一个读取显示器型号的东西,了解了EDID这个数据结构。EDID的全称是Extended Display Identification Data(扩展显示标识数据),VGA、DVI的EDID由主块128字节组成,HDMI的EDID增加扩展块(128字节),扩展块的内容主要是和音频属性相关的,DVI和VGA没有音频,HDMI自带音频,扩展块数据规范按照CEA-861x标准定义,未来可能增加到512或256的整数倍。
其中包含有关显示器及其性能的参数,包括供应商信息、最大图像大小、颜色设置、厂商预设置、频率范围的限制以及显示器名和序列号的字符串等等。形象地说,EDID就是显示器的身份证、户口本、技能证书等证件的集合,目的就是告诉别人我是谁,我从哪来,我能干什么。
参考资料:EDID的简介和解析 - 花生红枣眼泪和小米 - 博客园 (cnblogs.com)
二、解析
1.注册表信息
在Windows中连接过的显示器会被记录在注册表中 计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\DISPLAY\CMN15F4\4&39f8f762&0&UID265988\Device Parameters,其中 CMN15F4\4&39f8f762&0&UID265988根据显示器型号代码而定。在这个项目下包含一个EDID的二进制数据。
2.软件解析
这里我们可以用Monitor Asset Manager这款软件解析EDID文件。
为了更加方便转换,最好再配合WinHex这款软件,主要用到数据解释器。
3.主要关注内容
| 偏移地址 | 数值 | 解释 |
|---|---|---|
| 0x08-0x09 | 0D AE | 制造商名称 |
| 0x0A-0x0B | F4 15 | 产品代码 |
| 0x0C-0x0F | 00 00 00 00 | 产品序列号 |
| 0x10 | 06 | 生产周 |
| 0x11 | 1B | 生产年份 |
| 0x15 | 22 | 最大水平图像尺寸,单位CM |
| 0x16 | 13 | 最大垂直图像尺寸,单位CM |
| 0x36-0x37 | 59 6F | 像素时钟/10000 |
| 0x38 | 80 | 水平活动像素数 |
| 0x39 | A0 | 水平blanking |
| 0x3A | 70 | 高四位:水平活动像素数,高4位与0x38组合 低四位:水平blanking,高4位与0x39组合 |
| 0x3B | 38 | 垂直活动像素数 |
| 0x3C | 3E | 垂直blanking |
| 0x3D | 40 | 高四位:垂直活动像素数,高4位与0x3B组合 低四位:垂直blanking,高4位与0x3C组合 |
- 制造商名称:3个字母组成,基于压缩的ASCII码,例如
00001=A… …11010=Z,这里0x08-0x09一共16位(0-15),其中第0位代表符号,1-5位表示第一个字母以此类推,共三个字母。将0x08-0x09中的0D AE转换后为CMN。 - 产品代码:固定为
4位16进制数,即两个字节。将0x0A-0x0B中的F4 15转换后为15F4。 - 产品序列号:即产品的流水号(数值型),直接转成16进制或以ASCII格式转换。序列号也可用字符型,在后面DTD部分定义。我这个显示器没记录此序列号。
- 生产周:即在当年中的生产周,范围
1\~52,注意0为无效值。06为第6周。 - 生产年份:规定1990开始计算,即
1990年为0,然后递增计算。1B为2017年。 - 像素时钟:将
0x36-0x37中的59 6F转换十进制28505,即为285MHz。 - 水平活动像素数:将
0x3A拆分前4位,与0x38拼接后得到07 80,转换十进制1920。 - 垂直活动像素数:将
0x3D拆分前4位,与0x3B拼接后得到0438,转换十进制1080。 - 水平blanking:将
0x3A拆分后4位,与0x39拼接后得到00 A0,转换十进制160。 - 垂直blanking:将
0x3D拆分后4位,与0x3C拼接后得到00 3E,转换十进制62。 - 刷新率:像素时钟×10000÷[(水平活动像素数+水平blanking)×(垂直活动像素数+垂直blanking)]=28505×10000÷[(1920+160)×(1080+62)]≈120Hz。
三、下载
这是本次测试用的注册表文件:



