水金龟属于什么茶| 男生13厘米属于什么水平| 伊朗是什么民族| 食欲不振是什么意思| 脑脊液是什么颜色| 飞机下降时耳朵疼是什么原因| 太极贵人是什么意思| 腰脱什么症状| 蜻蜓是什么生肖| 吃完羊肉不能吃什么水果| reebok是什么牌子| 骨髓抑制是什么意思| 专科有什么专业| 小孩吃什么通便降火| 老年人便秘吃什么好| 新斯的明是什么药| 荨麻疹吃什么药好的快| 衡于虑的衡什么意思| 什么是丹毒| 泌乳素高是什么原因引起的| 狗是什么偏旁| 刚满月的小狗吃什么| 遗精是什么原因引起的| 股票尾盘拉升说明什么| 冷战的男人是什么心理| 额头疼是什么原因| 卧槽是什么意思| 凌晨两点多是什么时辰| 什么什么之财| 玉仁玫白膏有什么功效| 砸是什么意思| 老年痴呆挂什么科| 打胰岛素是什么病| 头部检查挂什么科| 萎缩性胃炎吃什么水果好| 尿比重偏高是什么原因| 胎儿打嗝是什么原因| 什么人不能喝绿豆汤| 为什么会得丹毒| 为什么不建议小孩打流感疫苗| 精液什么颜色| 88.88红包代表什么意思| 月桂酸是什么| 眼睛模糊是什么原因引起的| 嘴唇没有血色是什么原因| 什么时候排卵| 1974年属虎的是什么命| 香蕉有什么好处| 皮瓣手术是什么意思| 工作效率是什么意思| 肛窦炎用什么药| 木加号读什么| 什么是药学| 什么人不能献血| 气血是什么意思| 孟子名什么| 忘乎所以是什么意思| 懵是什么意思| 甘草长什么样子图片| 过敏性结膜炎用什么药| 腹部ct挂什么科| 憨是什么意思| 一个山一个鬼念什么| 知识渊博是什么意思| 男性尿道痒吃什么药| 诺氟沙星胶囊治什么| 阴道瘙痒用什么药最好| 什么原因引起尿酸高| 美人盂是什么意思| 胸口痛吃什么药| 男人阴虱用什么药| 糖尿病的诊断标准是什么| 生脉饮适合什么人群| 吃什么中药能降血压| 甘草泡水喝有什么功效| 头疼头晕去医院挂什么科| 猴跟什么生肖配对最好| 脑梗死吃什么药| 什么乐器最好学| 诺如病毒感染吃什么药| 慢性病是什么意思| 黄油是什么意思| 眼睛为什么会长麦粒肿| 肾结石要忌口什么东西| 屏蔽一个人意味着什么| 总是掉头发是什么原因| 便秘吃什么食物| 出库是什么意思| 刘备和刘表什么关系| 原始鳞状上皮成熟是什么意思| 女同学过生日送什么礼物比较好| 贝字旁的字和什么有关| 黄色有什么黄| 右手中指痛什么预兆| imao什么意思| 所费不赀是什么意思| 牛仔裤配什么鞋| 一什么鸟窝| bjd是什么| 条状血流信号是什么意思| 为什么总长火疖子| 慢性阑尾炎吃什么药| 1970年属狗是什么命| 华佗发明了什么| 凌晨五点是什么时辰| 乙肝15阳性是什么意思| 让球是什么意思| 韭菜不能和什么一起吃| vivo是什么品牌手机| 羊水什么颜色| 吃什么能增肥| 今年27岁属什么生肖| 血糖高是什么意思| 阴道炎用什么药效果好| 临汾有什么大学| pc是什么材料| 打喷嚏流清鼻涕属于什么感冒| 高什么阔什么| 肾结石有什么影响| 中国的国果是什么| 绿茶是什么| 夏至吃什么食物| 减肥吃什么蔬菜| 肺动脉流的是什么血| 人生观价值观世界观是什么意思| 1963属什么生肖| 甲状腺结节不能吃什么东西| 睡着后抽搐抖动是什么| 咳嗽嗓子疼吃什么药| 西瓜又什么又什么| 冒失是什么意思| 孩子张嘴睡觉是什么原因| 吃醪糟有什么好处| 什么主皮毛| 什么是盆底肌| 胃病吃什么药最好根治| 世界上最小的动物是什么| 日本人什么时候投降的| 肚脐眼痒是什么原因| 紫砂壶什么泥料最好| 博士和博士后有什么区别| 什么时间艾灸效果最好| 5是什么生肖| 二月初二是什么星座| 面粉可以做什么好吃的| 坛城是什么意思| 腮腺炎吃什么| 济南有什么好吃的| 刀个刀个刀刀那是什么刀| bpm是什么| 健脾丸和归脾丸有什么区别| 包虫病是什么病| 辄的意思是什么| 什么时候受孕率最高| 亲子鉴定需要什么| 酱酱酿酿是什么意思| 腋窝疼是什么原因| 剌是什么意思| 肝低回声结节是什么意思| 芊芊是什么意思| 横纹肌溶解症是什么原因造成的| 头发细软是什么原因| 乳腺炎吃什么药好| 睡觉嗓子干是什么原因| 咸鱼翻身是什么意思| 三叉戟是什么意思| 什么花最好看| 蝉是什么意思| 二月初五是什么星座| 鱼肝油什么时候吃最好| 膀胱过度活动症是什么原因引起的| 屎忽鬼是什么意思| 反流性食管炎可以吃什么水果| 25度穿什么衣服合适| 教师节是什么时候| 腰椎退变是什么意思| 属虎五行属什么| 中山大学是什么级别| 什么草药可以止痒| 中元节是什么节日| 鸡胸是什么病| 右侧卵巢囊性结构是什么意思| 手机为什么突然关机| 二黑是什么意思| 妈祖是什么| 什么东西养胃又治胃病| qa是什么| 为什么天天晚上做梦| 蜂王浆什么时间吃最好| 为什么女人阴唇会变大| 不惑之年是什么意思| 乳腺结节是什么| 湿热体质吃什么食物好| 免疫球蛋白e高说明什么| 生完孩子可以吃什么水果| 顶到子宫是什么感觉| 绿茶喝多了有什么危害| 胆红素是什么意思| 什么是轻食| 朋友搬家送什么礼物好| 3p是什么意思| 宫颈癌是什么| 双亲是什么意思| 芙蓉花是什么花| 咳嗽吃什么菜| 胃肠造影主要检查什么| 罗曼蒂克什么意思| 胁迫是什么意思| ENBD手术全称是什么| 康普茶是什么| 做梦梦见猪是什么意思| 喜欢的反义词是什么| alienware是什么牌子| 去痣挂号挂什么科| 减肥适合吃什么主食| 颖五行属什么| 经常性偏头疼是什么原因| 用什么回奶最快最有效| 为什么医院开的钙都是碳酸钙| 杨过是什么生肖| 嘴唇紫红色是什么原因| 济公搓的泥丸叫什么| 南柯一梦是什么意思| 蜂蜜有什么功效和作用| 陶渊明是什么朝代的| 子宫平滑肌瘤什么意思| 大自然是什么意思| 冰酒是什么酒| 摩卡是什么意思| 阴超能检查出什么| 狗狗不能吃什么| 湿气重的人吃什么好| pisen是什么牌子| hr什么意思| 男性感染支原体有什么症状| 1975年是什么年| 为什么射出的精子里有淡红色| 精神什么| 脑硬化是什么病严重吗| 成双成对是什么生肖| 疖子是什么原因引起的| 上海松江有什么好玩的地方| 阑尾炎痛起来什么感觉| 40岁适合什么工作| 针灸有什么作用| 神经性皮炎用什么药膏效果最好| 温度计代表什么生肖| 什么马不能骑| 什么人不能吃洋葱| 宝宝眼屎多是什么原因| pi是什么意思| 补血补气吃什么好| 入睡难一般是什么原因造成的| 头发干枯毛躁是什么原因| 贡中毒有什么症状| 高考早点吃什么好| 大便带血是什么原因| 氨基酸态氮是什么| 武则天是什么生肖| 缺维生素b吃什么食物| 灸石门为什么会不孕| 电表走的快是什么原因| 宅男是什么意思| 新生儿足底采血检查什么项目| 百度
Skip to content

w23/wonitors

Folders and files

NameName
Last commit message
Last commit date

Latest commit

?

History

4 Commits
?
?
?
?
?
?
?
?
?
?

Repository files navigation

Why this repo?

Once upon a time I had an impossible to ignore urge to read EDIDs of all connected displays on Windows. In bare C and WinAPI only.

Expectation: There's a function like GetEdidForMonitor(HMONITOR)

Reality: One does not simply. There are no officially documented ways to do this, no fully working code examples, and no, LLMs couldn't conjure one up either (although they did provide valuable research pointers).

A brief sequence of events

  1. Call EnumDisplayMonitors() (масло масляное) to receive a bunch of HMONITOR handles for each connected display.
  2. GetMonitorInfo() to get MONITORINFOEX. szDevice will contain display device name like \\.\DISPLAY14.
  3. Use EnumDisplayDevices(szDevice, EDD_GET_DEVICE_INTERFACE_NAME) to get DISPLAY_DEVICE.DeviceID containing device path like \\?\DISPLAY#LKG001A#5&272c5422&0&UID513#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  4. Use SetupDiGetClassDevs(GUID_DEVINTERFACE_MONITOR, DIGCF_DEVICEINTERFACE) to request a set of all monitor-class devices interfaces.
  5. Enumerate the set using SetupDiEnumDeviceInterfaces(set, GUID_DEVINTERFACE_MONITOR, index), getting SP_DEVICE_INTERFACE_DATA
  6. For each interface retrieve SP_INTERFACE_DEVICE_DETAIL_DATA using SetupDiGetDeviceInterfaceDetail(set, iface_data). It's a three-step process. First, get the detail struct size, then allocate it, then call the function again to fill the detail data. Also, use this function to read SP_DEVINFO_DATA.
  7. Compare detail.DevicePath with the device path DISPLAY_DEVICE.DeviceID from step 3. Note that they will have different case, so case-insensitive comparison is needed. If they match, then you've found associated interface for the HMONITOR from step 1.
  8. Use SetupDiOpenDevRegKey(set, devinfo_data) to open registry key. (Yes, the regedit-registry. No, it's not practical to guess the key, it's something like HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\CMN152A\5&272c5422&0&UID512\Device Parameters and seems unstable)
  9. Use RegQueryValueEx(key, "EDID") to read EDID value data into buffer of 128 bytes. No, it won't read past 128 bytes to get extensions, e.g. for CEC.
  10. If nothing failed, you're done. Time to cleanup all this mess. Maybe the real treasure was all the handles we created and memory we allocated along the way.

Bonus One

The example code also reads monitor positions and current modes, so that there's association between EDID and virtual display geometry.

No, I haven't found an easy read monitor names (e.g. vendor, model). I haven't really looked, though.

Bonus Two

This repo contains some cmake configuration to manifest this app into a DPI-aware world. Without this, the bonus one code would read dpi-unaware (scaled) monitor positions, which might be not what you want.

Appendix

How to read EDID in X11:

  1. XRRGetScreenResources() to get resources.
  2. For each resources->output[i]: use XRRGetOutputProperty(output, XInternAtom("EDID")), done.

About

Enumerate displays and read EDID on Windows using C, WinAPI, and luck ??

Topics

Resources

License

Stars

Watchers

Forks

三醋酯纤维是什么面料 举足轻重是什么意思 什么奶茶最好喝 情商是什么 吃什么药头脑立刻清醒
白骨精是什么妖怪 不孕吐的人说明什么 蝙蝠是什么类动物 胃疼吃什么药好得最快最有效 车工是做什么的
梦到孩子死了是什么征兆 什么是克氏综合征 吃什么皮肤好 pr间期缩短是什么意思 合寿木是什么意思
脚为什么会抽筋 久卧伤什么 什么能解酒 smr是什么意思 雷字五行属什么
你叫什么名字英语怎么说hcv8jop0ns4r.cn 胪是什么意思hcv9jop8ns1r.cn 月经推迟什么原因引起的hcv9jop5ns9r.cn 脚水肿是什么原因gysmod.com 子宫肌瘤吃什么食物好hcv9jop0ns3r.cn
1978年属什么的hcv8jop5ns6r.cn 膝盖不舒服挂什么科qingzhougame.com 阴虚火旺吃什么中成药好hcv8jop2ns4r.cn 遮挡车牌属于什么行为hcv8jop2ns2r.cn 老年人助听器什么牌子好hcv8jop4ns3r.cn
荨麻疹是什么原因引起jasonfriends.com 洗面奶和洁面乳有什么区别xscnpatent.com 桃花眼的女人什么命hcv9jop2ns0r.cn 什么补血效果最好最快hcv8jop6ns3r.cn 什么是电解质hcv9jop0ns2r.cn
总胆固醇高是什么意思hcv9jop3ns9r.cn 合羽念什么hcv7jop4ns8r.cn 千张是什么hcv9jop1ns8r.cn 我俩太不公平这是什么歌hcv7jop6ns9r.cn 五子登科是什么意思hcv8jop8ns0r.cn
百度