通过WMI查找所有显示器的所有可能屏幕分辨率 [英] Find All Possible Screen Resolutions for All Monitors via WMI

查看:22
本文介绍了通过WMI查找所有显示器的所有可能屏幕分辨率的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在WMI查询中执行此操作?

尝试首先在VideoModeDescriptor类上直接使用查询,但这仅在实例化时可访问。因此尝试了InstancesOf,如以下AutoHotkey代码片段所示:

Enabled := ComObjError(1)
wmi := ComObjGet("winmgmts:{impersonationLevel=impersonate}!\" A_ComputerName "
ootwmi")
Instances := wmi.InstancesOf("VideoModeDescriptor", 1)
  For Instance In Instances
  msgbox % Instance.CompositePolarityType ; e.g. test first element
不成功,但它可能与GetObject一起使用,如here所述。 因此,查询WmiMonitorListedSupportedSourceModes的另一种选择是更好的方法,但如何获得原始分辨率数据呢?

推荐答案

AHK的完整解决方案是:

wmi := ComObjGet("winmgmts:{impersonationLevel=impersonate}!\" A_ComputerName "
ootwmi")
for monitor in wmi.ExecQuery("SELECT NumOfMonitorSourceModes, MonitorSourceModes FROM WmiMonitorListedSupportedSourceModes WHERE Active=TRUE",,wbemFlagForwardOnly := 32)
{
modes := ""
Loop, % monitor.NumOfMonitorSourceModes - 1
modes .= monitor.MonitorSourceModes[A_Index - 1].HorizontalActivePixels . " " . monitor.MonitorSourceModes[A_Index - 1].HorizontalImageSize . " "
msgbox % monitor.InstanceName . "`n" . modes

有趣的是,标准For Each键、值迭代产生的monitor为空,而rootcimv2的代码失败,并出现无效类错误。ExecQuery足够慷慨地提供InstanceName,即使它未在原始查询中指定。
以下VBScript代码只产生首选的分辨率,但很容易将上面的技术应用于所有这些分辨率:

strComputer = "."

strQuery = "SELECT PreferredMonitorSourceModeIndex, NumOfMonitorSourceModes, MonitorSourceModes " & _
       "FROM WmiMonitorListedSupportedSourceModes"

Set objWMIService = GetObject("winmgmts:\" & strComputer & "ROOTWMI")
Set colItems = objWMIService.ExecQuery(strQuery, , 48)

For Each objItem In colItems
    intIndex = objItem.PreferredMonitorSourceModeIndex
    msgbox("NumOfMonitorSourceModes: " & objItem.NumOfMonitorSourceModes & _
Replace("
InstanceName: ", "
", vbLf) & objItem.InstanceName & _
Replace("
Horizontal: ", "
", vbLF) & objItem.MonitorSourceModes(intIndex).HorizontalActivePixels & _
Replace("
Vertical: ", "
", vbLF) & objItem.MonitorSourceModes(objIintIndex).VerticalActivePixels)
Next

这篇关于通过WMI查找所有显示器的所有可能屏幕分辨率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆