param(
[int]$Width = 1920,
[int]$Height = 1080,
[int]$DevNum = 0 # 显示器编号,0=第一个
)
Add-Type 'using System;using System.Runtime.InteropServices;public class Disp {
[DllImport("user32.dll", CharSet=CharSet.Ansi)] public static extern bool EnumDisplaySettings(string lpszDeviceName,int iModeNum,ref DEVMODE lpDevMode);
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] public struct DEVMODE {
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)] public string dmDeviceName; public short dmSpecVersion; public short dmDriverVersion; public short dmSize; public short dmDriverExtra; public int dmFields; public int dmPositionX; public int dmPositionY; public int dmDisplayOrientation; public int dmDisplayFixedOutput; public short dmColor; public short dmDuplex; public short dmYResolution; public short dmTTOption; public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)] public string dmFormName; public short dmLogPixels; public int dmBitsPerPel; public int dmPelsWidth; public int dmPelsHeight; public int dmDisplayFlags; public int dmDisplayFrequency;
}
}
'
$mode = New-Object Disp+DEVMODE
$mode.dmSize = [Runtime.InteropServices.Marshal]::SizeOf($mode)
$supported = $false$i = 0while ([Disp]::EnumDisplaySettings($null, $i, [ref]$mode)) { if ($mode.dmPelsWidth -eq $Width -and $mode.dmPelsHeight -eq $Height) {
$supported = $true
break
}
$i++
}if ($supported) {
Write-Host "SUPPORTED: $Width x $Height"
exit 0} else {
Write-Host "NOT SUPPORTED: $Width x $Height"
exit 1}执行:powershell -NoProfile -ExecutionPolicy Bypass -File CheckRes.ps1 -Width 1920 -Height 1080退出码 0 → 支持退出码 1 → 不支持👉 BAT 中可判断:
powershell -NoProfile -ExecutionPolicy Bypass -File CheckRes.ps1 -Width 1920 -Height 1080if %errorlevel%==0 ( echo 显示器支持该分辨率 ) else ( echo 显示器不支持该分辨率 )✅ 二、CMD 查看当前分辨率(不能判断支持列表)
wmic path Win32_VideoController get CurrentHorizontalResolution,CurrentVerticalResolution⚠️ 只能看当前,无法枚举支持模式。✅ 三、多显示器判断(简要说明)EnumDisplaySettings(NULL, i, ...)默认枚举 当前主显示器若要分别判断 DISPLAY1 / DISPLAY2,需传入 \\.\DISPLAY1等设备名(可用 EnumDisplayDevices先枚举设备名)如你需要,我可以给你多显示器版本 PowerShell 脚本(指定 DISPLAY1 / DISPLAY2)。
暂无相关文章
相关文章 我的服务器硬件坏了谁负责?数据丢了机房赔吗? 你们说的10M独享带宽和100M共享带宽有什么不同?我业务该选哪种? 服务器托管和服务器租用有什么区别?我该选哪个? 如何通过命令行判断当前显示器是否支持某个分辨率?