如何通过WMI查询获取所有显示器支持的全部屏幕分辨率
通过WMI查询显示器所有支持分辨率的实现方案
你提到的WmiMonitorListedSupportedSourceModes确实是最优方案,它直接读取显示器EDID固件中的原生支持模式数据,不需要额外处理实例化逻辑,以下是可直接运行的AutoHotkey实现:
; 开启COM错误提示方便调试 ComObjError(true) ; 连接root\wmi命名空间的WMI服务 wmiService := ComObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\wmi") ; 查询所有WmiMonitorListedSupportedSourceModes实例,每个实例对应一个物理显示器 monitorModeSets := wmiService.InstancesOf("WmiMonitorListedSupportedSourceModes") output := "" Loop % monitorModeSets.Count { modeSet := monitorModeSets.ItemIndex(A_Index-1) output .= "第" A_Index "台显示器支持的分辨率:`n" ; 遍历当前显示器的所有支持模式 Loop % modeSet.NumOfMonitorSourceModes { mode := modeSet.MonitorSourceModes[A_Index-1] ; 拼接分辨率+刷新率信息 output .= " - " mode.HorizontalActiveSize "x" mode.VerticalActiveSize " " mode.VerticalFrequency "Hz`n" } output .= "`n" } MsgBox % output
- 代码返回的就是显示器原生支持的原始分辨率数据,不需要额外解析EDID二进制内容
- 若要筛选有效模式,可跳过HorizontalActiveSize或VerticalActiveSize为0的无效条目
- 该方案仅支持Windows Vista及以上系统,符合当前主流Windows版本的运行要求
内容的提问来源于stack exchange,提问作者Laurie Stearn
相关产品推荐
相关产品推荐

