Abrufen der Bildschirmauflösung über die Windows-Befehlszeile

19

Ich habe mehrere Vorschläge zu Programmen zum Ändern der Auflösung über die Befehlszeile gesehen. Ich möchte es jedoch nur anzeigen, nicht ändern.

Unter Linux kann ich xrandroder verwenden xdpyinfo, um diese Informationen abzurufen, also suche ich so etwas.

Ich brauche es auch, um in einer Cygwin-Shell zu arbeiten.

Zitrax
quelle
2
Hinweis: Bei Interesse steht auch eine PowerShell- Version zur Verfügung. Drüben bei StackOverflow lösten sie auch das Multimonitor-Problem
Nixda

Antworten:

20

Versuche dies:

wmic desktopmonitor get screenheight, screenwidth

Aus Cygwin heraus:

cmd /c wmic desktopmonitor get screenheight, screenwidth

Ich bin mir nicht sicher, welche Tricks ich verwenden soll, um die Ausgabe zu nutzen. Vielleicht eine temporäre Textdatei?

paradroid
quelle
Ja, danke, es funktioniert von cmd.exe. Allerdings habe ich vergessen zu erwähnen, dass ich dies brauche, um in einer Cygwin-Shell zu arbeiten, und wmic scheint dort nicht zu funktionieren.
Zitrax
1
@ Zitrax: Jetzt sagst du es mir.
Paradroid
Danke noch einmal. Es funktionierte jedoch nicht, wenn eine Verbindung mit rdesktop (oder ssh in cygwin) hergestellt wurde. Wäre toll, es auch in all diesen Situationen zu haben.
Zitrax
2
Funktioniert nicht unter Win8.1 oder Win10. Es gibt leere Ergebnisse für Bildschirmhöhe und Bildschirmbreite.
David Balažic
1
@paradroid Es funktioniert nicht, wie in der anderen Antwort erklärt
David Balažic
10

Mit dxdiag ist es jedoch nicht der schnellste Weg:

@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

Dadurch werden die Auflösungen aller Monitore gedruckt.

Bearbeiten . Die akzeptierte Antwort verwendet WMIC. ( wmic desktopmonitor get screenheight, screenwidth /format:value). Dies funktioniert nicht unter Windows 8 / 8.1 / 10. Für die neueren Windows-Versionen kann dies verwendet werden:

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

Ein Skript, das die Windows-Version überprüft und dann die Auflösung mit dem wmic abruft:

@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
npocmaka
quelle
2

Vielen Dank an @paradroid :) Mit WMIC habe ich Batch Script auf Remote Desktop geschrieben, nicht im Vollbildmodus, aber dennoch praktisch. ^ _ ^

@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

Fühlen Sie sich frei zu erkunden. Fühlen Sie sich begeistert zu verbessern. (y)

Rhak Kahr
quelle
1

benutze MultiMonitorTool :

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

dann analysieren Sie die Datei "% TEMP% \ MultiMonitorTool.csv" (ich arbeite noch daran)

eadmaster
quelle
1

die oldes antwort scheint nicht mehr zu funktionieren (win7 64bit); Ich habe das so gelöst

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%
Lesto
quelle
1

Für die Einrichtung mehrerer Monitore teilen Sie einfach den Befehl auf:

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%
Rob Moore
quelle
Bitte verwenden Sie Codeblöcke. Sie sind hier schon lange genug Mitglied, um zu wissen, wie Abschriften funktionieren und wie sie lesbar aussehen.
Karan
1

Der einfachste Weg:

@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%
SachaDee
quelle
Können Sie etwas näher erläutern, was hier vor sich geht? Ich verstehe, /format:Valuegibt Ergebnisse in einer var = value-Form zurück, die dann im setBefehl verwendet wird. Wenn Sie nur einen Wert möchten, gibt es eine Möglichkeit, dies ohne die for-Schleife zu tun?
Kyle Delaney
Wenn Sie nur den benötigten Wert anzeigen möchten, können Sie mit Sicherheit nur eine wmicAbfrage mit den richtigen Parametern ausführen, um nur den Wert anzuzeigen. In der forSchleife werden hier setdie Werte für eine spätere Verwendung im Code verwendet. Dies ist in diesem Fall die einzige Möglichkeit, bateinen externen Befehl zu verwenden wmic.exe.
SachaDee
Sie können setmit einem wmicErgebnis ohne for-Schleife nicht verwenden?
Kyle Delaney
Nein, es ist nicht möglich !
SachaDee
0

Das ist mein Versuch:

@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
::****************************************************
Hackoo
quelle