次のスクリプトを使用して、WMIを使用するWindowsで画面解像度を取得しています。コンピューターが横向きモードの場合、スクリプトは正常に動作しますが、縦向きモードの場合は誤った値を返します。 XPで適切に動作し、Vistaでは試していません。これがWindows 7 WMIのバグであることを誰かが確認できますか?.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_DesktopMonitor",,48)
For Each objItem in colItems
Wscript.Echo "-----------------------------------"
Wscript.Echo "Win32_DesktopMonitor instance"
Wscript.Echo "-----------------------------------"
Wscript.Echo "ScreenHeight: " & objItem.ScreenHeight
Wscript.Echo "ScreenWidth: " & objItem.ScreenWidth
Next
参考までに、PowerShellコードは次のとおりです。
Get-WmiObject -Class Win32_DesktopMonitor | Select-Object ScreenWidth,ScreenHeight
横モードでも縦モードでも同じ値が得られます。
更新:
マルチモニター環境では、すべてのモニターの情報を取得できます。
PS> Add-Type -AssemblyName System.Windows.Forms
PS> [System.Windows.Forms.Screen]::AllScreens
BitsPerPixel : 32
Bounds : {X=0,Y=0,Width=1280,Height=800}
DeviceName : \\.\DISPLAY1
Primary : True
WorkingArea : {X=0,Y=0,Width=1280,Height=770}
BitsPerPixel : 32
Bounds : {X=1280,Y=0,Width=1920,Height=1200}
DeviceName : \\.\DISPLAY2
Primary : False
WorkingArea : {X=1280,Y=0,Width=1920,Height=1170}
これは、Win32_VideoController
WMIクラスから取得できます。 VideoModeDescription
プロパティには、画面解像度と色深度が含まれています。
(Get-WmiObject -Class Win32_VideoController).VideoModeDescription;
1600 x 900 x 4294967296 colors
他の回答と同じですが、単純なcmdの場合:
wmic path Win32_VideoController get VideoModeDescription
上記の@Shay Levyの回答は、Powershellセッションが起動されたときにアクティブだった幅/高さを正確に報告しています。 PSの起動後にモニターを回転させると、元の、現在は正しくない値が報告され続けます。
の システムインフォメーション クラスは方向を取得する別の方法を提供し、セッションの起動後にディスプレイが回転した場合でも、現在のPSセッションで変更されます。
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SystemInformation]::ScreenOrientation
Angle0
[System.Windows.Forms.SystemInformation]::PrimaryMonitorSize
IsEmpty Width Height
------- ----- ------
False 1680 1050
モニターを回転させて...
[System.Windows.Forms.SystemInformation]::ScreenOrientation
Angle90
[System.Windows.Forms.SystemInformation]::PrimaryMonitorSize
IsEmpty Width Height
------- ----- ------
False 1050 1680
https://msdn.Microsoft.com/en-us/library/system.windows.forms.systeminformation(v = vs.110).aspx
これは私の試みです:
@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
::****************************************************