Ottieni la risoluzione del display dalla riga di comando di Windows


19

Ho visto diversi suggerimenti sui programmi per modificare la risoluzione dalla riga di comando. Tuttavia, voglio solo visualizzarlo, non modificarlo.

Su Linux posso usare xrandro xdpyinfoper ottenere queste informazioni, quindi sto cercando qualcosa del genere.

Ho anche bisogno che funzioni all'interno di una shell Cygwin.


2
Nota: è disponibile anche una versione di PowerShell se qualcuno è interessato. Su StackOverflow hanno anche risolto il problema del multimonitor
nixda

Risposte:


20

Prova questo:

wmic desktopmonitor get screenheight, screenwidth

Dall'interno di Cygwin:

cmd /c wmic desktopmonitor get screenheight, screenwidth

Non sono sicuro di quali trucchi utilizzare per utilizzare l'output. Forse un file di testo temporaneo?


Sì, grazie funziona da cmd.exe. Tuttavia ho dimenticato di menzionare che ho bisogno di questo per funzionare all'interno di una shell Cygwin e Wmic non sembra funzionare lì.
Zitrax,

1
@Zitrax: ora dimmelo tu.
paradroid,

Grazie ancora. Tuttavia, non ha funzionato quando si è connessi con rdesktop (o ssh in cygwin). Sarebbe bello averlo anche in tutte quelle situazioni.
Zitrax,

2
Non funziona su Win8.1 o win10. Fornisce risultati vuoti sia per l'altezza dello schermo che per la larghezza dello schermo.
David Balažic,

1
@paradroid Non funziona, come spiegato nell'altra risposta
David Balažic,

10

Con dxdiag non è il modo più veloce:

@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

questo stamperà le risoluzioni di tutti i monitor.

Modifica . La risposta accettata utilizza WMIC. ( wmic desktopmonitor get screenheight, screenwidth /format:value). Questo non funzionerà su Windows 8 / 8.1 / 10. Per le versioni più recenti di Windows questo può essere usato:

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

Uno script che controlla la versione di Windows e quindi ottiene la risoluzione con il 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

Grazie @paradroid :) Con WMIC, ho scritto Batch Script su Desktop remoto non a schermo intero ma comunque conveniente. ^ _ ^

@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

Sentiti libero di esplorare. Sentiti entusiasta di migliorare. (Y)


1

usa MultiMonitorTool :

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

quindi analizzare il file "% TEMP% \ MultiMonitorTool.csv" (ci sto ancora lavorando)


1

la vecchia risposta non sembra funzionare più (win7 64 bit); ho risolto in quel modo

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

Per la configurazione multi monitor basta dividere il comando:

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%

Si prega di utilizzare blocchi di codice. Sei stato un membro qui abbastanza a lungo per sapere come funziona il markdown e come farlo sembrare leggibile.
Karan,

1

Il modo più semplice:

@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%

Puoi dare qualche spiegazione in più su cosa sta succedendo qui? Comprendo i /format:Valuerisultati restituiti in una forma var = value che viene quindi utilizzata nel setcomando. Se vuoi solo un valore, c'è un modo per farlo senza il ciclo for?
Kyle Delaney,

Se vuoi solo visualizzare il valore necessario, puoi sicuramente eseguire una wmicquery da solo con i parametri giusti per visualizzare solo il valore. Il forciclo viene utilizzato qui per seti valori per un uso successivo nel codice. Questo è l'unico modo per farlo batusando un comando esterno ( wmic.exein questo caso).
SachaDee,

Non puoi usare setcon un wmicrisultato senza un ciclo for?
Kyle Delaney,

No, non è possibile!
SachaDee,

0

Questo è il mio tentativo:

@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
::****************************************************
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.