我在通过软件读取显示器状态时碰见了问题。
我是通过ddc/ci 指令,通过VCP code获取显示器的状态。
我可以通过一些测试软件或者通过自己写代码获取显示器的一些状态,但是当这个VCP code值代表多个功能时(有多个sub-code),读取会读不到内容。
如链接方式:可以获取到显示器功能集合的capability string,然后getVCPFeature获取某个VCP code代表功能的当前值
https://learn.microsoft.com/zh-cn/windows/win32/monitor/using-the-low-level-monitor-configuration-functions
如下是我测试的显示器的capability string:
Capabilities String:
(prot(monitor)type(lcd)model(HP Z24m G3)cmds(01 02 03 07 0C E3 F3)vcp(02 04 05 08 0B 0C 10 12 16 18 1A 2E(00 01 02 03) 52 60(0F 11 13) 62 6C 6E 70 86(01 02 05) 87(01 02 03 04 05 06 07) 8D(01 02) AC AE B2 B6 C0 C6 C8 C9 CA(01 02) CC(01 02 03 04 05 06 09 0A 0D 0E 14) D6(01 02 03 04 05) DC(00( 00 01 02 05 13 14 15 1D 2B)02(00 01 02 03 04) ) DF E0(02(00 01 03))** E1(04(00 01 03 04 06 08 09 0A) 0A(00 01) 0C(20) 0F(00 01) 10(00 01) 27(02 03 04 05 07 09 0A FF) 28(00 01) 2C(00 01) 2D(00 01) 30(00 01) 31(00 01) 32(00 01) 35(00 01 02) 36(00 01) 39(02 03) 3B 3C 3E 3F(02 03 04 05) 40(00 01 02 03) 42(00 01) 43(00 01) 45(00 01) 49(00 01) 4A(00 01) 4C( 00 01 ) 4E(00 01 02 03 04 05 FF) 56 57(00 01) 6E(01) 6F(00) 72(00 01) 73(00 01))** E6(00 01) E7(00 01) E8(18(00 01) 1B( 00 01 02) 1C(00 01) 1E( 00 01 02)) E9(0D(00 01)) EA(00 01) EB(00( 01 02 03 04)) EE(01 02 03) EF(01 02 03 04 05) F0 F5(00 01 02 03 05 06 0A 0B 0C 0D 0E 0F 11 12 13 14 15 18 19 1B 1C 1D 1E) F8(00 01 02(00 01 02) 0A) FA(00 01 02) FB FC FD FE(00 01 02 03 04))mswhql(1)asset_eep(40)mccs_ver(2.2))
如图,结合上述Capabilities String,我可以通过读取E6,E7的VCP来直接获取这两个代表功能的当前值--E6(00 01) E7(00 01)
但是由于E1用于多个功能,如上述中加粗部分,直接读取E1只会返回00,并不能直接获取到想要那个功能的值。
我需要的是获取displayport mode 的当前值,也就是Capabilities String中相当于括号嵌套的 E1(35(00 01 02)),请问这能怎么实现?
我这边也用一些测试的软件,直接下DDC/CI指令的,如果能通过修改指令格式或者通过编程解决问题,将不胜感激!!