Windows komut satırından ekran çözünürlüğü alın


19

Komut satırından çözünürlüğü değiştirmek için programlar hakkında birkaç öneri gördüm. Ancak sadece göstermek istiyorum, değiştirmek değil.

Linux üzerinde bu bilgiyi almak için xrandrveya kullanabilirim xdpyinfo, bu yüzden böyle bir şey arıyorum.

Ayrıca bir cygwin kabuğu içinde çalışmasına ihtiyacım var.


2
Not: İlgilenen biri varsa bir PowerShell sürümü de vardır . StackOverflow'da da multimonitor problemini
çözdüler

Yanıtlar:


20

Bunu dene:

wmic desktopmonitor get screenheight, screenwidth

Cygwin içinden:

cmd /c wmic desktopmonitor get screenheight, screenwidth

Çıktıyı kullanmak için hangi hileleri kullanacağımdan emin değilim. Belki geçici bir metin dosyası?


Evet teşekkürler cmd.exe çalışır. Ancak bir cygwin kabuğu içinde çalışmak için buna ihtiyacım olduğunu ve unuttum orada çalışmak gibi görünmüyor unuttum.
Zitrax

1
@Zitrax: Şimdi söyle bana.
paradroid

Tekrar teşekkürler. Yine de rdesktop (veya ssh içine cygwin) ile bağlandığında çalışmadı. Tüm bu durumlarda da sahip olmak harika olurdu.
Zitrax

2
Win8.1 veya win10 üzerinde çalışmaz. Hem ekran yüksekliği hem de ekran genişliği için boş sonuçlar verir.
David Balažic


10

Dxdiag ile en hızlı yol olmasa da:

@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

bu, tüm monitörlerin çözünürlüklerini basacaktır.

Düzenle . Kabul edilen cevap WMIC kullanır. ( wmic desktopmonitor get screenheight, screenwidth /format:value) .Windows8 / 8.1 / 10'da çalışmaz. Daha yeni Windows sürümleri için bu kullanılabilir:

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

Windows sürümünü kontrol eden ve wmic ile çözünürlük alan bir komut dosyası:

@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

Teşekkür ederim @paradroid :) WMIC ile, Uzak Masaüstü tam ekran değil ama yine de uygun Toplu Script yazdı. ^ _ ^

@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

Keşfetmekten çekinmeyin. Geliştirmek için hevesli olun. (Y)


1

MultiMonitorTool kullanın :

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

sonra "% TEMP% \ MultiMonitorTool.csv" dosyasını ayrıştırın (bu konuda hala çalışıyorum)


1

oldes cevabı artık işe yaramıyor gibi görünüyor (win7 64bit); bu şekilde çözdüm

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

Çoklu monitör kurulumu için komutu bölebilirsiniz:

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%

Lütfen kod blokları kullanın. Burada, markdown'un nasıl çalıştığını ve okunabilir görünmesini sağlayacak kadar uzun süredir üye oldunuz.
Karan

1

En basit yol:

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

Burada olup bitenler hakkında biraz daha açıklama yapabilir misiniz? Daha /format:Valuesonra setkomutta kullanılan var = değer formundaki sonuçları döndürdüğünü anlıyorum . Sadece bir değer istiyorsanız, for döngüsü olmadan bunu yapmanın bir yolu var mı?
Kyle Delaney

Sadece gereken değeri görüntülemek istiyorsanız, sadece değeri görüntülemek wmiciçin doğru parametreleri içeren tek başına bir sorgu çalıştırabilirsiniz . forDöngü için buraya kullanılan setkodda bir sonra kullanılmak üzere değerler. batHarici bir komut kullanarak bunu yapmanın tek yolu budur ( wmic.exebu durumda).
SachaDee

Sen kullanamazsınız setbir ile wmicdöngü için olmadan sonucu?
Kyle Delaney

Hayır bu mümkün değil!
SachaDee

0

Bu benim denemem:

@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
::****************************************************
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.