PowerShell 获取多显示器分辨率和刷新率的两种方案
2024-11-09 12:37:55
获取多显示器分辨率和刷新率
如何获取一台拥有多显示器的机器上,每个显示器的分辨率和刷新率?这是一个在系统管理和应用开发中经常遇到的问题。本文将提供几种基于 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 # 这可能返回空值,取决于显卡驱动
}
}
操作步骤:
- 打开 PowerShell。
- 复制粘贴以上代码并执行。
注意事项: MaxRefreshRate
的值可能不准确或者为空,这取决于显卡驱动程序的实现。此方法在某些情况下可能无法准确匹配所有显示器,尤其是在使用混合显卡或复杂的显示配置时。
方案二:使用 CIM_VideoControllerResolution 和关联DeviceId
利用 CIM_VideoControllerResolution
获取分辨率和刷新率信息,并通过 DeviceId
属性关联 WmiMonitorID
,从而获取每个显示器的分辨率信息.
原理: CIM_VideoControllerResolution
提供了多种可能的显示分辨率和刷新率,需要通过DeviceId
和 WmiMonitorID.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
}
}
操作步骤:
- 打开 PowerShell。
- 复制粘贴以上代码并执行。
安全建议: 运行 PowerShell 脚本时,请确保其来源可靠,并理解其功能,以防止潜在的安全风险。 建议在测试环境中验证脚本,然后再在生产环境中使用.
这两种方案都提供了获取多显示器分辨率和刷新率的方法。根据具体情况选择适合的方案即可。建议结合实际测试选择最佳方案。如果需要更高级的显示控制,可以考虑使用更专业的显示管理 API 或工具。