返回

PowerShell 获取多显示器分辨率和刷新率的两种方案

windows

获取多显示器分辨率和刷新率

如何获取一台拥有多显示器的机器上,每个显示器的分辨率和刷新率?这是一个在系统管理和应用开发中经常遇到的问题。本文将提供几种基于 PowerShell 的解决方案,并深入探讨其原理和使用方法。

方案一:关联 WmiMonitorID 和 Win32_VideoController

利用 WmiMonitorID 可以获取显示器的基本信息,而 Win32_VideoController 可以提供分辨率和刷新率信息。通过关联这两个 WMI 类,即可获得所需的数据。

原理: Win32_VideoController 并非直接对应一个物理显示器,而是代表一个显卡接口。当系统连接多个显示器时,需要通过 InstanceName 属性将其与 WmiMonitorID 关联起来。

代码:

$Monitors = Get-CimInstance WmiMonitorID -Namespace root\wmi
foreach ($Monitor in $Monitors) {
  $VideoController = Get-CimInstance -ClassName Win32_VideoController | Where-Object {$_.InstanceName -match $Monitor.InstanceName}
  [PSCustomObject]@{
    MonitorName     = $Monitor.UserFriendlyName
    HorizontalResolution = $VideoController.CurrentHorizontalResolution
    VerticalResolution   = $VideoController.CurrentVerticalResolution
    RefreshRate         = $VideoController.CurrentRefreshRate
    MaxRefreshRate      = $VideoController.MaxRefreshRate # 这可能返回空值,取决于显卡驱动
  }
}

操作步骤:

  1. 打开 PowerShell。
  2. 复制粘贴以上代码并执行。

注意事项: MaxRefreshRate 的值可能不准确或者为空,这取决于显卡驱动程序的实现。此方法在某些情况下可能无法准确匹配所有显示器,尤其是在使用混合显卡或复杂的显示配置时。

方案二:使用 CIM_VideoControllerResolution 和关联DeviceId

利用 CIM_VideoControllerResolution 获取分辨率和刷新率信息,并通过 DeviceId 属性关联 WmiMonitorID,从而获取每个显示器的分辨率信息.

原理: CIM_VideoControllerResolution 提供了多种可能的显示分辨率和刷新率,需要通过DeviceIdWmiMonitorID.InstanceName 进行匹配筛选出当前正在使用的分辨率和刷新率。

代码:

$Monitors = Get-CimInstance WmiMonitorID -Namespace root\wmi

foreach ($Monitor in $Monitors) {
    $DeviceId = ($Monitor.InstanceName -split "&")[1]
    $Resolution = Get-CimInstance -ClassName CIM_VideoControllerResolution | Where-Object { $_.DeviceId -eq $DeviceId }

    [PSCustomObject]@{
        MonitorName       = $Monitor.UserFriendlyName
        HorizontalResolution = $Resolution.HorizontalResolution
        VerticalResolution   = $Resolution.VerticalResolution
        RefreshRate         = $Resolution.RefreshRate
    }
}

操作步骤:

  1. 打开 PowerShell。
  2. 复制粘贴以上代码并执行。

安全建议: 运行 PowerShell 脚本时,请确保其来源可靠,并理解其功能,以防止潜在的安全风险。 建议在测试环境中验证脚本,然后再在生产环境中使用.

这两种方案都提供了获取多显示器分辨率和刷新率的方法。根据具体情况选择适合的方案即可。建议结合实际测试选择最佳方案。如果需要更高级的显示控制,可以考虑使用更专业的显示管理 API 或工具。