c++ - 如何从EDID中读取显示器型号?

标签 c++ edid

在注册表中,有一个(或多个)键,具体取决于您有多少个显示器 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\DEL404C{Some Unique ID}\DeviceParameters\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 

我的问题是如何使用 C 或 C++ 只读取监视器模型(例如“SyncMaster”)而不读取所有信息?

EDID的格式描述如下:http://en.wikipedia.org/wiki/Extended_display_identification_data

最佳答案

这里您感兴趣的是 EDID 的描述符 block ,它们位于字节范围 54-71、72-89、90-107 和 108-125 中。这是 EDID 中的这四个 block :

#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/

相关文章:

xamarin - 如何在 OSX 中获取显示器 EDID?

c++ - 如何解析来自 EDID 的数字数据

c++ - 能不能用g++编译代码用Solaris Studio的Performance Analyser做性能分析?

c++ - "move semantics"和 "rvalue reference"的 Visual Studio 实现

C++:构建选项 "-j"是什么意思?

c++ - std::vector 以外的排名保持数据结构?

C# c++ 命名管道连接

audio - 如果在xorg.conf中使用UseEDID “false”,如何取回音频(Nvidia304)

windows - 在 Windows XP/7 中获取 EDID 的 Win32 代码

linux - Linux下获取屏幕供应商和序列号