รับความละเอียดการแสดงผลจากบรรทัดคำสั่งของ windows


19

ฉันเห็นคำแนะนำหลายประการเกี่ยวกับโปรแกรมที่จะเปลี่ยนความละเอียดจากบรรทัดคำสั่ง อย่างไรก็ตามฉันต้องการแสดงมันไม่เปลี่ยนแปลง

บน linux ฉันสามารถใช้xrandrหรือxdpyinfoรับข้อมูลนี้ดังนั้นฉันกำลังมองหาบางอย่างเช่นนั้น

ฉันต้องการมันเพื่อทำงานภายในเปลือก cygwin


2
หมายเหตุ: นอกจากนี้ยังมีรุ่นPowerShellหากใครสนใจ มากกว่าที่ StackOverflow พวกเขายังแก้ปัญหาผู้ใช้หลายคน
nixda

คำตอบ:


20

ลองสิ่งนี้:

wmic desktopmonitor get screenheight, screenwidth

จากภายใน Cygwin:

cmd /c wmic desktopmonitor get screenheight, screenwidth

ฉันไม่แน่ใจว่าจะใช้ลูกเล่นอะไรเพื่อใช้เอาต์พุต อาจเป็นไฟล์ข้อความชั่วคราว?


ใช่ขอบคุณมันทำงานได้จาก cmd.exe อย่างไรก็ตามฉันลืมที่จะพูดถึงว่าฉันต้องการสิ่งนี้เพื่อทำงานภายในเปลือก cygwin และ wmic ดูเหมือนจะไม่ทำงานที่นั่น
Zitrax

1
@Zitrax: ตอนนี้คุณบอกฉัน
Paradroid

ขอบคุณอีกครั้ง. มันไม่ทำงานเมื่อเชื่อมต่อกับ rdesktop (หรือ ssh เข้าสู่ cygwin) คงจะดีถ้ามีทุกอย่างในสถานการณ์เช่นนี้
Zitrax

2
ไม่ทำงานบน Win8.1 หรือ win10 มันให้ผลลัพธ์ที่ว่างเปล่าสำหรับทั้งความสูงและความกว้างของหน้าจอ
David Balažic

1
@paradroid มันใช้งานไม่ได้ตามที่อธิบายไว้ในคำตอบอื่น ๆ
David Balažic

10

ด้วยdxdiagแม้ว่ามันจะไม่ใช่วิธีที่เร็วที่สุด:

@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

นี่จะพิมพ์ความละเอียดของจอภาพทั้งหมด

แก้ไข คำตอบที่ยอมรับใช้ WMIC ( wmic desktopmonitor get screenheight, screenwidth /format:value). นี้จะไม่ทำงานบน windows8 / 8.1 / 10 สำหรับรุ่น windows ที่ใหม่กว่านี้สามารถใช้:

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

สคริปต์ที่ตรวจสอบเวอร์ชันของ Windows และรับความละเอียดด้วย 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

ขอบคุณ @paradroid :) ด้วย WMIC ฉันเขียน Batch Script ไปยังเดสก์ท็อประยะไกลไม่ใช่แบบเต็มหน้าจอ แต่ก็ยังสะดวก ^ _ ^

@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

สำรวจอิสระ รู้สึกกระตือรือร้นที่จะปรับปรุง (y)


1

ใช้MultiMonitorTool :

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

จากนั้นแยกวิเคราะห์ไฟล์ "% TEMP% \ MultiMonitorTool.csv" (ฉันยังคงใช้งานได้อยู่)


1

ดูเหมือนว่าคำตอบ oldes จะไม่ทำงานอีกต่อไป (win7 64 บิต); ฉันแก้ไขวิธีนั้น

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

สำหรับการตั้งค่าจอภาพหลายจอเพียงแค่แบ่งคำสั่ง:

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%

กรุณาใช้บล็อครหัส คุณเป็นสมาชิกที่นี่นานพอที่จะทราบว่า markdown ทำงานอย่างไรและทำให้ดูอย่างไร
Karan

1

วิธีที่ง่ายที่สุด:

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

คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับสิ่งที่เกิดขึ้นได้ไหม ฉันเข้าใจว่า/format:Valueส่งคืนผลลัพธ์ในรูปแบบ var = value ซึ่งจะใช้ในsetคำสั่ง หากคุณต้องการเพียงหนึ่งค่ามีวิธีทำเช่นนี้หากไม่มีลูป for หรือไม่?
Kyle Delaney

หากคุณต้องการแสดงค่าที่ต้องการคุณสามารถเรียกใช้wmicแบบสอบถามอย่างเดียวโดยใช้พารามิเตอร์ที่เหมาะสมเพื่อแสดงค่า การforวนซ้ำถูกใช้ที่นี่เพื่อsetค่าสำหรับใช้ในภายหลังในรหัส นั่นเป็นวิธีเดียวที่จะทำได้ในการbatใช้คำสั่งภายนอก ( wmic.exeในกรณีนี้)
SachaDee

คุณไม่สามารถใช้setกับwmicผลลัพธ์ที่ไม่มีการวนซ้ำได้หรือไม่
Kyle Delaney

ไม่เป็นไปไม่ได้!
SachaDee

0

นี่คือความพยายามของฉัน:

@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
::****************************************************
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.