Obtenez la résolution d'affichage à partir de la ligne de commande Windows


19

J'ai vu plusieurs suggestions de programmes pour changer la résolution à partir de la ligne de commande. Cependant, je veux juste l'afficher, pas le changer.

Sur linux, je peux utiliser xrandrou xdpyinfopour obtenir ces informations, donc je cherche quelque chose comme ça.

J'en ai également besoin pour travailler dans un shell cygwin.


2
Remarque: une version PowerShell est également disponible si quelqu'un est intéressé. Chez StackOverflow, ils ont également résolu le problème des
multimoniteurs

Réponses:


20

Essaye ça:

wmic desktopmonitor get screenheight, screenwidth

Depuis Cygwin:

cmd /c wmic desktopmonitor get screenheight, screenwidth

Je ne sais pas quelles astuces utiliser pour utiliser la sortie. Peut-être un fichier texte temporaire?


Oui, cela fonctionne à partir de cmd.exe. Cependant, j'ai oublié de mentionner que j'ai besoin de cela pour fonctionner à l'intérieur d'un shell cygwin et wmic ne semble pas fonctionner là-bas.
Zitrax du

1
@Zitrax: Maintenant tu me dis.
paradroid

Merci encore. Cela n'a pas fonctionné lors de la connexion avec rdesktop (ou ssh dans cygwin). Ce serait formidable de l'avoir dans toutes ces situations également.
Zitrax

2
Ne fonctionne pas sur Win8.1 ou win10. Il donne des résultats vides pour la hauteur d'écran et la largeur d'écran.
David Balažic

1
@paradroid Cela ne fonctionne pas, comme expliqué dans l' autre réponse
David Balažic

10

Avec dxdiag, ce n'est pas le moyen le plus rapide:

@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

cela imprimera les résolutions de tous les moniteurs.

Modifier . La réponse acceptée utilise WMIC. ( wmic desktopmonitor get screenheight, screenwidth /format:value). Cela ne fonctionnera pas sur Windows8 / 8.1 / 10. Pour les versions Windows plus récentes, cela peut être utilisé:

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

Un script qui vérifie la version de Windows et obtient ensuite la résolution avec le 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

Merci @paradroid :) Avec WMIC, j'ai écrit Batch Script sur Remote Desktop pas en plein écran mais toujours pratique. ^ _ ^

@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

N'hésitez pas à explorer. Sentez-vous enthousiaste à améliorer. (y)


1

utilisez MultiMonitorTool :

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

puis analyser le fichier "% TEMP% \ MultiMonitorTool.csv" (je travaille toujours dessus)


1

la réponse oldes ne semble plus fonctionner (win7 64bit); j'ai résolu de cette façon

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

Pour une configuration multi-écrans, divisez simplement la commande:

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%

Veuillez utiliser des blocs de code. Vous êtes membre depuis assez longtemps pour savoir comment fonctionne le démarquage et comment le rendre lisible.
Karan

1

La manière la plus simple:

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

Pouvez-vous donner un peu plus d'explications sur ce qui se passe ici? Je comprends que les /format:Valuerésultats sont renvoyés sous une forme var = value qui est ensuite utilisée dans la setcommande. Si vous ne voulez qu'une seule valeur, existe-t-il un moyen de le faire sans la boucle for?
Kyle Delaney

Si vous souhaitez simplement afficher la valeur requise, vous pouvez à coup sûr exécuter une wmicrequête seule avec les bons paramètres pour afficher simplement la valeur. La forboucle est utilisée ici pour setles valeurs pour une utilisation ultérieure dans le code. C'est la seule façon de le faire en batutilisant une commande externe ( wmic.exedans ce cas).
SachaDee

Vous ne pouvez pas utiliser setavec un wmicrésultat sans boucle for?
Kyle Delaney

Non, ce n'est pas possible!
SachaDee

0

Voici mon essai:

@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
::****************************************************
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.