web-dev-qa-db-ja.com

Windows 7でWMI / Powershellを使用して画面解像度を取得する

次のスクリプトを使用して、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
16
user281693

参考までに、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}
35
Shay Levy

これは、Win32_VideoController WMIクラスから取得できます。 VideoModeDescriptionプロパティには、画面解像度と色深度が含まれています。

(Get-WmiObject -Class Win32_VideoController).VideoModeDescription;

結果

1600 x 900 x 4294967296 colors
12
Trevor Sullivan

他の回答と同じですが、単純な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

3
Clayton

これは私の試みです:

@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
::****************************************************
0
Hackoo