Windows 명령 행에서 디스플레이 해상도 얻기


19

커맨드 라인에서 해상도를 변경하는 프로그램에 대한 몇 가지 제안을 보았습니다. 그러나 나는 그것을 변경하지 않고 표시하고 싶습니다.

리눅스에서는 이 정보를 사용 xrandr하거나 xdpyinfo얻을 수 있으므로 그런 것을 찾고 있습니다.

cygwin 쉘 내에서 작동하려면 필요합니다.


2
참고 : 관심이 있으시면 PowerShell 버전도 있습니다. StackOverflow에서 멀티 모니터 문제도 해결했습니다
nixda

답변:


20

이 시도:

wmic desktopmonitor get screenheight, screenwidth

Cygwin 내에서 :

cmd /c wmic desktopmonitor get screenheight, screenwidth

출력을 사용하기 위해 어떤 트릭을 사용 해야하는지 잘 모르겠습니다. 아마도 임시 텍스트 파일입니까?


예, cmd.exe에서 작동합니다. 그러나 나는 cygwin 쉘 내부에서 작동하기 위해 이것이 필요하고 wmic은 거기에서 작동하지 않는 것으로 언급했다.
Zitrax

1
@Zitrax : 이제 말해.
paradroid

다시 감사합니다. rdesktop (또는 ssh를 cygwin으로)과 연결할 때 작동하지 않았습니다. 모든 상황에서 그것을 가지고 있으면 좋을 것입니다.
Zitrax

2
Win8.1 또는 win10에서는 작동하지 않습니다. 화면 높이와 화면 너비 모두에 대해 빈 결과를 제공합니다.
David Balažic


10

dxdiag를 사용 하면 가장 빠른 방법은 아닙니다.

@echo off

del ~.txt /q /f >nul 2>nul
start "" /w dxdiag /t ~
setlocal enableDelayedExpansion
set currmon=1 
for /f "tokens=2 delims=:" %%a in ('find "Current Mode:" ~.txt') do (
    echo Monitor !currmon! : %%a
    set /a currmon=currmon+1

)
endlocal
del ~.txt /q /f >nul 2>nul

모든 모니터의 해상도를 인쇄합니다.

편집 . 허용 된 답변은 WMIC를 사용합니다. ( wmic desktopmonitor get screenheight, screenwidth /format:value) .This는 windows8 / 8.1 / 10에서 작동하지 않습니다. 최신 Windows 버전의 경우 다음을 사용할 수 있습니다.

wmic path Win32_VideoController get VideoModeDescription,CurrentVerticalResolution,CurrentHorizontalResolution /format:value

Windows 버전을 확인한 다음 wmic으로 해상도를 얻는 스크립트 :

@echo off

setlocal
for /f "tokens=4,5 delims=. " %%a in ('ver') do set "version=%%a%%b"


if version lss 62 (
    ::set "wmic_query=wmic desktopmonitor get screenheight, screenwidth /format:value"
    for /f "tokens=* delims=" %%@ in ('wmic desktopmonitor get screenwidth /format:value') do (
        for /f "tokens=2 delims==" %%# in ("%%@") do set "x=%%#"
    )
    for /f "tokens=* delims=" %%@ in ('wmic desktopmonitor get screenheight /format:value') do (
        for /f "tokens=2 delims==" %%# in ("%%@") do set "y=%%#"
    )

) else (
    ::wmic path Win32_VideoController get VideoModeDescription,CurrentVerticalResolution,CurrentHorizontalResolution /format:value
    for /f "tokens=* delims=" %%@ in ('wmic path Win32_VideoController get CurrentHorizontalResolution  /format:value') do (
        for /f "tokens=2 delims==" %%# in ("%%@") do set "x=%%#"
    )
    for /f "tokens=* delims=" %%@ in ('wmic path Win32_VideoController get CurrentVerticalResolution /format:value') do (
        for /f "tokens=2 delims==" %%# in ("%%@") do set "y=%%#"
    )

)

echo Resolution %x%x%y%

endlocal

2

@paradroid 감사합니다 :) WMIC를 사용하여 Batch Script를 원격 데스크톱에 작성했지만 전체 화면은 아니지만 여전히 편리합니다. ^ _ ^

@echo off
:p00
setlocal
if "%1"=="" goto :q01
set i01=wmic desktopmonitor
set i01=%i01% where availability^=3
set i01=%i01% get screenHeight,screenWidth
set o01=%temp%\ScrRes.txt
%i01%>"%o01%"
for /f "delims= skip=1" %%o in ('type %o01%') do call :p01 %1 %%o
goto :p99

:p01
set srvnm=%1
set /a tl=%2-40
set /a ll=%3-80
start mstsc /admin /w:%ll% /h:%tl% /v:%srvnm%
goto :eof

:q01
echo.
echo ^>^> Syntax: %0 MachineHostname [enter]
echo.

:p99
if exist "%o01%" del "%o01%" /f /q
echo.
echo ^>^> Sincerely Thank You For Using..
endlocal
goto :eof

자유롭게 탐험하십시오. 열정을 키우고 향상 시키십시오. (와이)


1

MultiMonitorTool 사용 :

MultiMonitorTool.exe /scomma "%TEMP%\MultiMonitorTool.csv"

그런 다음 "% TEMP % \ MultiMonitorTool.csv"파일을 구문 분석하십시오 (여전히 작업 중입니다)


1

이전 답변은 더 이상 작동하지 않는 것 같습니다 (win7 64bit). 나는 그런 식으로 해결

FOR /f "tokens=1,2" %%a IN ('"wmic desktopmonitor get screenheight, screenwidth"') DO (
    SET /a ScreenHeight=%%a
    SET /a ScreenWidth=%%b
)
echo %ScreenHeight%
echo %ScreenWidth%

1

다중 모니터 설정의 경우 다음 명령을 분할하십시오.

setlocal ENABLEDELAYEDEXPANSION
setlocal ENABLEEXTENSIONS
set wmicheight="wmic desktopmonitor get screenheight /format:value"
set wmicwidth="wmic desktopmonitor get screenwidth /format:value"
:height
for /f "tokens=2 delims==" %%a in ('%wmicheight%') do (
    If %%a LEQ 1 (
        rem skip if height is not bigger than 1
    ) Else (
        rem take the first height value larger than 1
        rem then skip to width
        Set /a "height=%%a"
        goto :width
    )
)
:width
for /f "tokens=2 delims==" %%a in ('%wmicwidth%') do (
    If %%a LEQ 1 (
        rem skip if width is not bigger than 1
    ) Else (
        rem add width found to get total width of all screens
        Set /a "width=width+%%a"
    )
)
echo %width% x %height%

코드 블록을 사용하십시오. 마크 다운이 작동하는 방식과 읽을 수있게 만드는 방법을 알기에 충분히 오랫동안 멤버였습니다.
Karan

1

가장 간단한 방법 :

@echo off
::By SachaDee 2018

FOR /F "skip=2 delims=" %%a IN ('wmic path Win32_VideoController get VideoModeDescription^,CurrentHorizontalResolution^,CurrentVerticalResolution /format:Value ^| findstr ":"') do set %%a

echo Width =^> %CurrentHorizontalResolution%
echo Height =^> %CurrentVerticalResolution%
echo Description =^> %VideoModeDescription%

여기서 무슨 일이 일어나고 있는지 좀 더 설명해 주시겠습니까? 나는 /format:Value결과를 var = value 형식으로 반환 한다는 것을 이해 하고 set명령에 사용됩니다 . 하나의 값만 원한다면 for 루프 없이이 작업을 수행 할 수 있습니까?
Kyle Delaney

필요한 값만 표시 wmic하려면 올바른 매개 변수를 사용하여 쿼리를 실행하여 값만 표시하면됩니다. for루프는 여기에 사용되는 set코드에서 나중에 사용하기 위해 값. 이것이 bat외부 명령 ( wmic.exe이 경우) 을 사용하는 유일한 방법 입니다.
SachaDee

당신은 사용할 수 없습니다 set로모그래퍼 wmicfor 루프없이 결과는?
Kyle Delaney

불가능합니다!
SachaDee

0

이것은 내 시도입니다 :

@echo off
Mode 45,3 & color 0A
Title Dislpay Resolution by Hackoo 2018
Set "WMIC_Command=wmic path Win32_VideoController get VideoModeDescription^,CurrentHorizontalResolution^,CurrentVerticalResolution /format:Value"
Set "H=CurrentHorizontalResolution"
Set "V=CurrentVerticalResolution"
Call :GetResolution %H% HorizontalResolution
Call :GetResolution %V% VerticalResolution
echo(
echo     Screen Resolution is : %HorizontalResolution% x %VerticalResolution%
pause>nul & Exit
::****************************************************
:GetResolution 
FOR /F "tokens=2 delims==" %%I IN (
  '%WMIC_Command% ^| find /I "%~1" 2^>^nul'
) DO FOR /F "delims=" %%A IN ("%%I") DO SET "%2=%%A"
Exit /b
::****************************************************
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.