Dapatkan resolusi tampilan dari baris perintah windows

19

Saya telah melihat beberapa saran tentang program untuk mengubah resolusi dari baris perintah. Namun saya hanya ingin menampilkannya, bukan mengubahnya.

Di linux saya bisa menggunakan xrandratau xdpyinfountuk mendapatkan info ini, jadi saya mencari sesuatu seperti itu.

Saya juga membutuhkannya untuk bekerja dalam shell cygwin.

Zitrax
sumber
2
Catatan: Ada juga versi PowerShell yang tersedia jika ada yang tertarik. Selama di StackOverflow mereka juga memecahkan masalah multimonitor
nixda

Jawaban:

20

Coba ini:

wmic desktopmonitor get screenheight, screenwidth

Dari dalam Cygwin:

cmd /c wmic desktopmonitor get screenheight, screenwidth

Saya tidak yakin trik apa yang digunakan untuk menggunakan output. Mungkin file teks sementara?

paradroid
sumber
Ya terima kasih ini bekerja dari cmd.exe. Namun saya lupa menyebutkan bahwa saya perlu ini untuk bekerja di dalam cangkang cygwin dan tampaknya wmic tidak bekerja di sana.
Zitrax
1
@Zitrax: Sekarang Anda beri tahu saya.
paradroid
Terima kasih lagi. Itu tidak bekerja ketika terhubung dengan rdesktop (atau ssh ke cygwin). Akan sangat bagus untuk memilikinya dalam semua situasi itu juga.
Zitrax
2
Tidak berfungsi pada Win8.1 atau win10. Ini memberikan hasil kosong untuk tinggi layar dan lebar layar.
David Balažic
1
@paradroid Tidak berfungsi, seperti dijelaskan dalam jawaban lain
David Balažic
10

Dengan dxdiag , ini bukan cara tercepat:

@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

ini akan mencetak resolusi semua monitor.

Edit . Jawaban yang diterima menggunakan WMIC. ( wmic desktopmonitor get screenheight, screenwidth /format:value). Ini tidak akan berfungsi pada windows8 / 8.1 / 10. Untuk versi windows yang lebih baru ini dapat digunakan:

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

Script yang memeriksa versi windows dan kemudian mendapatkan resolusi dengan 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
npocmaka
sumber
2

Terima kasih @parroidroid :) Dengan WMIC, saya menulis Batch Script ke Remote Desktop tidak layar penuh tetapi masih nyaman. ^ _ ^

@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

Jangan ragu untuk menjelajah. Merasa antusias untuk meningkat. (y)

Rhak Kahr
sumber
1

gunakan MultiMonitorTool :

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

lalu parsing file "% TEMP% \ MultiMonitorTool.csv" (saya masih mengerjakan ini)

eadmaster
sumber
1

jawaban oldes tampaknya tidak berfungsi lagi (win7 64bit); Saya memecahkannya

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
sumber
1

Untuk pengaturan multi monitor, cukup bagi perintah:

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
sumber
Silakan gunakan blok kode. Anda telah menjadi anggota di sini cukup lama untuk mengetahui cara kerja penurunan harga dan cara membuatnya terlihat mudah dibaca.
Karan
1

Cara paling sederhana:

@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
sumber
Bisakah Anda memberi sedikit penjelasan lebih lanjut tentang apa yang terjadi di sini? Saya mengerti /format:Valuemengembalikan hasil dalam bentuk var = nilai yang kemudian digunakan dalam setperintah. Jika Anda hanya menginginkan satu nilai, apakah ada cara untuk melakukan ini tanpa for loop?
Kyle Delaney
Jika Anda hanya ingin menampilkan nilai yang dibutuhkan, Anda dapat menjalankan wmickueri sendirian dengan parameter yang tepat untuk hanya menampilkan nilai. The forLoop digunakan di sini untuk setnilai untuk digunakan nanti dalam kode. Itulah satu-satunya cara untuk melakukannya dalam batmenggunakan perintah eksternal ( wmic.exedalam hal ini).
SachaDee
Anda tidak dapat menggunakan setdengan wmichasil tanpa for loop?
Kyle Delaney
Tidak, itu tidak mungkin!
SachaDee
0

Ini adalah percobaan saya:

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