vbscript - 通过 WMI 查找所有显示器的所有可能的屏幕分辨率
问题描述
如何在 WMI 查询中执行此操作?
尝试首先直接在VideoModeDescriptor类上使用查询,但是只有在实例化时才能访问。所以尝试了InstancesOf,如下面的 AutoHotkey 片段:
Enabled := ComObjError(1)
wmi := ComObjGet("winmgmts:{impersonationLevel=impersonate}!\\" A_ComputerName "\root\wmi")
Instances := wmi.InstancesOf("VideoModeDescriptor", 1)
For Instance In Instances
msgbox % Instance.CompositePolarityType ; e.g. test first element
没有成功,但是有可能与此处GetObject
所述结合使用。所以查询WmiMonitorListedSupportedSourceModes的另一个选项是更好的方法,但是如何获取原始分辨率数据呢?
解决方案
AHK的完整解决方案是:
wmi := ComObjGet("winmgmts:{impersonationLevel=impersonate}!\\" A_ComputerName "\root\wmi")
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
键值迭代产生空白 for monitor
,并且代码因root\cimv2
无效类错误而失败。即使在原始查询中未指定,也ExecQuery
足够慷慨。
以下 vbscript 代码仅产生首选分辨率,但很容易将上述技术应用于所有这些:InstanceName
strComputer = "."
strQuery = "SELECT PreferredMonitorSourceModeIndex, NumOfMonitorSourceModes, MonitorSourceModes " & _
"FROM WmiMonitorListedSupportedSourceModes"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\ROOT\WMI")
Set colItems = objWMIService.ExecQuery(strQuery, , 48)
For Each objItem In colItems
intIndex = objItem.PreferredMonitorSourceModeIndex
msgbox("NumOfMonitorSourceModes: " & objItem.NumOfMonitorSourceModes & _
Replace("\nInstanceName: ", "\n", vbLf) & objItem.InstanceName & _
Replace("\nHorizontal: ", "\n", vbLF) & objItem.MonitorSourceModes(intIndex).HorizontalActivePixels & _
Replace("\nVertical: ", "\n", vbLF) & objItem.MonitorSourceModes(objIintIndex).VerticalActivePixels)
Next
推荐阅读
- c# - 登录后从用户管理器获取用户
- c# - 如何修改 LINQ 请求的条件以删除另一个表中的用户?
- java - Spring CORS 仅在某些资源上失败
- angular - ng-bootstrap 两个崩溃在角度 6 中无法按需要工作
- python - 无法从 pipenv 中的 python 连接到 MySQL
- ios - 从 PromiseKit 包装迁移
- javascript - 如何将 onClick 事件处理程序添加到画布元素(弧)?
- kubernetes - Kubernetes - 在节点中使用服务
- c# - 如何使用多个 IdentityDbContext
在一个项目中? - c++ - 错误 C1083 无法打开包含文件:'pybind11/pybind11.h':没有这样的文件或目录