在注册表中,有一个(或多个)键,具体取决于您拥有多少台显示器HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ DISPLAY \ DEL404C {Some Unique ID} \ Device Parameters \ EDID,它是REG_BINARY键。就我而言,这是:
00 ff ff ff ff ff ff 00 4c 2d 6f 03 39 31 59 4d
07 12 01 03 0e 29 1a 78 2a 80 c5 a6 57 49 9b 23
12 50 54 bf ef 80 95 00 95 0f 81 80 81 40 71 4f
01 01 01 01 01 01 9a 29 a0 d0 51 84 22 30 50 98
36 00 ac ff 10 00 00 1c 00 00 00 fd 00 38 4b 1e
51 0e 00 0a 20 20 20 20 20 20 00 00 00 fc 00 53
79 6e 63 4d 61 73 74 65 72 0a 20 20 00 00 00 ff
00 48 56 44 51 32 30 36 37 37 37 0a 20 20 00 ef
我的问题是如何只读取显示器模型(例如“SyncMaster”),而不是使用C或C++读取所有信息?
EDID的格式在这里描述:http://en.wikipedia.org/wiki/Extended_display_identification_data
最佳答案
您在这里感兴趣的是EDID的描述符块,它们位于字节范围54-71、72-89、90-107和108-125中。这是您的EDID中的这四个块:
#1: 9a29 a0d0 5184 2230 5098 3600 acff 1000 00
#2: 0000 00fd 0038 4b1e 510e 000a 2020 2020 20
#3: 0000 00fc 0053 796e 634d 6173 7465 720a 20
#4: 0000 00ff 0048 5644 5132 3036 3737 370a 00
您可以标识包含监视器名称的描述符,因为前三个字节全为零(因此它不是详细的定时描述符),而第四个字节全为
FC
(指示类型)。第五个字节及以后的字节包含名称,在这里:5379 6e63 4d61 7374 6572 0a20 SyncMaster..
因此,简而言之:在偏移量54、72、90和108处检查序列
00 00 00 FC
;如果找到匹配项,则监视器名称是接下来的12个字节。关于c++ - 如何从EDID中读取显示器的型号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10255737/