4

我试图找出一种通过批处理文件检测用户分辨率是否高于或低于“1280 x 1024”的方法。

如果分辨率为“1280 x 1024”或更高,则执行 A。否则执行 B。

有谁知道如何做到这一点?

干杯,

艾略特

4

3 回答 3

3

作为注册表的替代方法,您还可以通过以下方式检查分辨率Wmic
wmic desktopmonitor where availability=3 get screenHeight,screenWidth
更多关于Win32_DesktopMonitor类的信息:http: //msdn.microsoft.com/en-us/library/windows/desktop/aa394122%28v=vs.85%29。 aspx

请注意,如果连接的监视器超过 1 个,可能会出现多行 - 您应该在脚本中处理这些情况。

于 2012-10-03T14:38:51.363 回答
1

由于以下几个原因,这有点棘手:

  1. 分辨率在注册表中,您可以使用reg.exe. 然而,它并不是很容易找到。对我来说,它在

    HKLM\SYSTEM\CurrentControlSet\Control\Video\{7FD4F64D-A7B2-41A9-AEEB-835BE4473FFA}\0000
    

    DefaultSettings.XResolutionDefaultSettings.YResolution。但是,GUID 可能会根据您拥有的视频卡和驱动程序而有所不同,因此您必须在HKLM\SYSTEM\CurrentControlSet\Control\Video.

  2. 更高的分辨率是什么意思?1366 × 768 会比 1280 × 1024 高吗?你计算总像素数吗?一维更高?同时?

无论如何,我拼凑了下一批。必要时进行调整。它在我的机器上产生了正确的结果,但我没有那么多要测试的东西。

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%l in ('reg query HKLM\SYSTEM\CurrentControlSet\Control\Video') do (
    reg query %%l\0000 /v DefaultSettings.XResolution >nul 2>&1
    if not errorlevel 1 (
        for /f "skip=1 tokens=3 delims= " %%x in ('reg query %%l\0000 /v DefaultSettings.XResolution') do (
            set /a X=%%x
        )
        for /f "skip=1 tokens=3 delims= " %%x in ('reg query %%l\0000 /v DefaultSettings.YResolution') do (
            set /a Y=%%x
        )
    )
)
echo Resolution: %X% × %Y%

if %X% GTR 1280 if %Y% GTR 1024 echo Greater than 1280 × 1024.
于 2012-10-03T12:24:21.403 回答
0

就我而言,wmic desktopmonitor没有任何回报。

这个适用于我的 Win 8.1

@ECHO OFF

for /f "delims=" %%# in  ('"wmic path Win32_VideoController  get CurrentHorizontalResolution,CurrentVerticalResolution /format:value"') do (
  set "%%#">nul
)

echo %CurrentHorizontalResolution%
echo %CurrentVerticalResolution%
于 2015-04-01T07:15:52.123 回答