powershell可通过.net screen类、注册表、cim/wmi及displayconfig模块获取windows显示设置,包括分辨率、缩放比例、主显示器、dpi、多屏布局、刷新率与旋转等参数。
可以通过 powershell 查询 windows 显示设置的关键参数,比如分辨率、缩放比例、主显示器标识、dpi 设置和多显示器布局等。核心方法是调用 windows api 或读取系统注册表、wmi/cim 类,部分信息需结合 .net 类(如 system.windows.forms.screen)获取。
使用 .NET Screen 类获取基础显示信息
这是最简单直接的方式,适用于获取每块屏幕的分辨率、工作区域、是否为主屏等运行时信息:
- 运行
[System.Windows.Forms.Screen]::AllScreens可列出所有已连接显示器 - 每个屏幕对象包含
Bounds(总分辨率)、WorkingArea(扣除任务栏后的可用区域)、Primary(是否为主显示器)、DeviceName(如\.DISPLAY1) - 注意:需先加载 WinForms 程序集,建议加一句
Add-Type -AssemblyName System.Windows.Forms
查询系统级 DPI 和缩放设置
Windows 的显示缩放比例(如 125%、150%)属于系统 DPI 设置,可通过注册表或 CIM 获取:
- 注册表路径:
HKCU:Control PanelDesktopWindowMetrics中的AppliedDPI值(单位为 1/96 inch,例如 120 表示 125% 缩放) - 更可靠方式是使用
Get-CimInstance -ClassName Win32_DesktopMonitor,但该类不直接暴露缩放值;推荐配合[System.Windows.Forms.SystemInformation]::PrimaryMonitorSize和实际逻辑像素对比推算 - 若需精确缩放百分比,可调用
Get-WinDisplaySetting(PowerShell 7.4+ 内置 cmdlet),或使用[System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Width / [System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Width * 100辅助估算(需已知基准)
读取多显示器位置与排列(物理布局)
显示器在桌面上的相对位置(左/右/上/下偏移)决定了扩展模式下的光标移动逻辑,这些信息存储在注册表中:
- 路径:
HKLM:SYSTEMCurrentControlSetControlGraphicsDriversConnectivity(动态连接状态) - 更稳定的是
HKCU:Control PanelDesktopMultiTaskingViewVirtualDesktops不适用;实际布局坐标保存在HKCU:SoftwareMicrosoftWindowsCurrentVersionExplorerScaling和HKCU:Control PanelDesktopPerMonitorSettings(Win10 1809+) - 推荐使用 WMI 类
WmiMonitorID(来自rootwmi)配合Get-CimInstance -Namespace rootwmi -ClassName WmiMonitorID获取设备 ID 和序列号,再结合EnumDisplayMonitorsAPI 调用反查位置(需通过 C# 代码封装)
获取高级显示属性(刷新率、色深、旋转)
这些参数需调用 Windows GDI 或 DXGI 接口,PowerShell 原生命令不直接支持,但可通过以下方式间接获取:
- 使用
Get-CimInstance -ClassName CIM_VideoController获取显卡基本信息(如显存、驱动版本),但不含当前分辨率刷新率 - 执行
dxdiag /t dxdiag.txt导出诊断文件后解析(不推荐自动化) - 最佳实践:借助开源模块如 DisplayConfig(PowerShell 封装 Windows Display Config API),运行
Get-DisplayConfig即可返回完整拓扑,含TargetMode(含宽高、刷新率、旋转)、SourceMode、缩放类型等











