Windowsコマンドラインから表示解像度を取得する


19

コマンドラインから解像度を変更するプログラムに関するいくつかの提案を見てきました。ただし、変更するのではなく表示するだけです。

Linux では、この情報を使用しxrandrたりxdpyinfo、この情報を取得したりできるので、そのようなものを探しています。

また、cygwinシェル内で動作する必要があります。


2
注:誰かが興味がある場合は、PowerShellバージョンも利用できます。StackOverflowでは、
マルチモニターの

回答:


20

これを試して:

wmic desktopmonitor get screenheight, screenwidth

Cygwin内から:

cmd /c wmic desktopmonitor get screenheight, screenwidth

出力を使用するためにどのようなトリックを使用するのかわかりません。おそらく一時的なテキストファイルですか?


はい、cmd.exeから動作します。ただし、cygwinシェル内で動作させるにはこれが必要であり、wmicはそこで動作しないようだということを忘れていました。
ジトラックス

1
@Zitrax:教えてください。
パラドロイド

再度、感謝します。ただし、rdesktop(またはcygwinへのssh)で接続すると機能しませんでした。これらのすべての状況でもそれを持っていると素晴らしいでしょう。
-Zitrax

2
Win8.1またはwin10では機能しません。screenheightとscreenwidthの両方について空の結果が得られます。
デビッドバラジック

1
で説明したように、それは仕事をしません@paradroid その他答え
デビッド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を使用して、バッチスクリプトをリモートデスクトップに書き込みましたが、フルスクリーンではなく便利です。^ _ ^

@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

古い答えはもう機能しないようです(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%

コードブロックを使用してください。あなたは、マークダウンがどのように機能し、どのように読みやすくするかを知るのに十分な長さのメンバーです。
カラン

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。1つの値だけが必要な場合、forループなしでこれを行う方法はありますか?
カイルデラニー

必要な値を表示するだけの場合wmicは、適切なパラメーターを指定してクエリを実行するだけで、値を表示することができます。ここでforループはset、後でコードで使用するために値に使用されます。これはbat、外部コマンド(wmic.exeこの場合)を使用して行う唯一の方法です。
SachaDee

あなたは使用することはできませんsetとのwmicforループせずに結果?
カイルデラニー

いいえ、それは不可能です!
-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.