Nhận độ phân giải màn hình từ dòng lệnh windows


19

Tôi đã thấy một số gợi ý về các chương trình để thay đổi độ phân giải từ dòng lệnh. Tuy nhiên tôi chỉ muốn hiển thị nó, không thay đổi nó.

Trên linux tôi có thể sử dụng xrandrhoặc xdpyinfođể có được thông tin này, vì vậy tôi đang tìm kiếm một cái gì đó như thế.

Tôi cũng cần nó để làm việc trong một vỏ Cygwin.


2
Lưu ý: Ngoài ra còn có phiên bản PowerShell nếu có ai quan tâm. Tại StackOverflow, họ cũng đã giải quyết được vấn đề về đa người dùng
nixda

Câu trả lời:


20

Thử đi:

wmic desktopmonitor get screenheight, screenwidth

Từ bên trong Cygwin:

cmd /c wmic desktopmonitor get screenheight, screenwidth

Tôi không chắc chắn những thủ thuật để sử dụng để sử dụng đầu ra. Có lẽ một tập tin văn bản tạm thời?


Vâng cảm ơn nó hoạt động từ cmd.exe. Tuy nhiên tôi đã quên đề cập rằng tôi cần điều này để hoạt động bên trong lớp vỏ cygwin và wmic dường như không hoạt động ở đó.
Zitrax

1
@Zitrax: Bây giờ bạn nói với tôi.
paradroid

Cảm ơn một lần nữa. Nó không hoạt động khi kết nối với rdesktop (hoặc ssh vào cygwin). Sẽ rất tuyệt nếu có nó trong tất cả các tình huống đó.
Zitrax

2
Không hoạt động trên Win8.1 hoặc win10. Nó cung cấp kết quả trống cho cả tầm nhìn và độ rộng màn hình.
David Balažic

1
@paradroid Nó không hoạt động, như đã giải thích trong câu trả lời khác
David Balažic

10

Với dxdiag mặc dù đó không phải là cách nhanh nhất:

@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

điều này sẽ in độ phân giải của tất cả các màn hình.

Chỉnh sửa . Câu trả lời được chấp nhận sử dụng WMIC. ( wmic desktopmonitor get screenheight, screenwidth /format:value). Điều này sẽ không hoạt động trên windows8 / 8.1 / 10. Đối với các phiên bản Windows mới hơn, điều này có thể được sử dụng:

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

Một tập lệnh kiểm tra phiên bản windows và sau đó lấy độ phân giải bằng 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

Cảm ơn bạn @paradroid :) Với WMIC, tôi đã viết Batch Script lên Remote Desktop không toàn màn hình nhưng vẫn tiện lợi. ^ _ ^

@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

Hãy khám phá. Cảm thấy đam mê để tăng cường. (y)


1

sử dụng MultiMonitorTool :

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

sau đó phân tích tệp "% TEMP% \ MultiMonitorTool.csv" (tôi vẫn đang làm việc này)


1

câu trả lời cũ dường như không còn hoạt động nữa (win7 64 bit); tôi đã giải quyết theo cách đó

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

Để thiết lập nhiều màn hình, chỉ cần tách lệnh:

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%

Vui lòng sử dụng các khối mã. Bạn đã là thành viên ở đây đủ lâu để biết cách hoạt động của markdown và làm thế nào để nó trông dễ đọc.
Karan

1

Cách đơn giản nhất:

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

Bạn có thể giải thích thêm một chút về những gì đang diễn ra ở đây không? Tôi hiểu /format:Valuekết quả trả về ở dạng var = value sau đó được sử dụng trong setlệnh. Nếu bạn chỉ muốn một giá trị, có cách nào để làm điều này mà không cần vòng lặp for không?
Kyle Delaney

Nếu bạn chỉ muốn hiển thị giá trị cần thiết, bạn có thể chắc chắn chỉ chạy một wmictruy vấn một mình với các tham số phù hợp để chỉ hiển thị giá trị. Các forvòng lặp được sử dụng ở đây để setcác giá trị cho việc sử dụng sau này trong các mã. Đó là cách duy nhất để làm điều đó batbằng cách sử dụng lệnh bên ngoài ( wmic.exetrong trường hợp này).
SachaDee

Bạn không thể sử dụng setvới wmickết quả mà không có vòng lặp for?
Kyle Delaney

Không, không thể!
SachaDee

0

Đây là thử của tôi:

@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
::****************************************************
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.