How to read the model of monitor from the EDID?

4k Views Asked by At

In the registry there is one (or more) key depending how many monitors you have HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\DEL404C{Some Unique ID}\Device Parameters\EDID which is a REG_BINARY key. In my case this is :

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 

My question is how can I read only model of monitor ("SyncMaster" for example) and not all of the information using C or C++?

The format of EDID is described here: http://en.wikipedia.org/wiki/Extended_display_identification_data

1

There are 1 best solutions below

1
On

What you're interested in here is the descriptor blocks of the EDID, which are found in the byte ranges 54-71, 72-89, 90-107, and 108-125. Here's those four blocks in your 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

You can identify the descriptor containing the monitor name because the first three bytes are all zero (so it isn't a detailed timing descriptor), and the fourth one byte FC (indicating the type). The fifth byte and beyond contain the name, which is here:

5379 6e63 4d61 7374 6572 0a20    SyncMaster..

So, in short: Check at offsets 54, 72, 90, and 108 for the sequence 00 00 00 FC; if you find a match, the monitor name is the next 12 bytes.