Get Screen resolution using WMI/powershell in Windows 7

后端 未结 6 623
温柔的废话
温柔的废话 2020-11-30 02:15

I am using the following script to get screen resolution in Windows using WMI. The script works fine when the computer is in landscape mode but returns incorrect values when

相关标签:
6条回答
  • 2020-11-30 02:29

    You can get all available resolution with this command:

    $Query = "SELECT * FROM CIM_VideoControllerResolution"
    $res = Get-WMIObject -query $Query | Select Caption
    
    0 讨论(0)
  • 2020-11-30 02:40

    For the record, the PowerShell code is:

    Get-WmiObject -Class Win32_DesktopMonitor | Select-Object ScreenWidth,ScreenHeight
    

    I get the same values in Landscape or in Portrait mode.

    UPDATE:

    In a multi monitor environment you can get the info for all monitors with:

    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}
    
    0 讨论(0)
  • 2020-11-30 02:44

    You can grab this from the Win32_VideoController WMI class. The VideoModeDescription property includes the screen resolution and the color depth.

    (Get-WmiObject -Class Win32_VideoController).VideoModeDescription;
    

    Result

    1600 x 900 x 4294967296 colors
    
    0 讨论(0)
  • 2020-11-30 02:44

    @Shay Levy's answer above accurately reports the Width/Height that was active when the powershell session was launched. If you rotate monitor after PS launch, it continues to report the original, now incorrect values.

    The SystemInformation class provides another way to get orientation, and it changes in the current PS session even if the display is rotated after the session launch.

    Add-Type -AssemblyName System.Windows.Forms
    [System.Windows.Forms.SystemInformation]::ScreenOrientation
    Angle0
    
    [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize
    IsEmpty                            Width                           Height
    -------                            -----                           ------
    False                              1680                             1050
    

    Rotate monitor, then...

    [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

    0 讨论(0)
  • 2020-11-30 02:45

    Same as the other answers, however for the plain cmd:

    wmic path Win32_VideoController get VideoModeDescription

    0 讨论(0)
  • 2020-11-30 02:55

    Here's an answer based on Shays only it formats the results for each screen as per the OPs' example.

    PowerShell Code to format the results of: [System.Windows.Forms.Screen]::AllScreens

    Add-Type -AssemblyName System.Windows.Forms
    $screen_cnt  = [System.Windows.Forms.Screen]::AllScreens.Count
    $col_screens = [system.windows.forms.screen]::AllScreens
    
    $info_screens = ($col_screens | ForEach-Object {
    if ("$($_.Primary)" -eq "True") {$monitor_type = "Primary Monitor    "} else {$monitor_type = "Secondary Monitor  "}
    if ("$($_.Bounds.Width)" -gt "$($_.Bounds.Height)") {$monitor_orientation = "Landscape"} else {$monitor_orientation = "Portrait"}
    $monitor_type + "(Bounds)                          " + "$($_.Bounds)"
    $monitor_type + "(Primary)                         " + "$($_.Primary)"
    $monitor_type + "(Device Name)                     " + "$($_.DeviceName)"
    $monitor_type + "(Bounds Width x Bounds Height)    " + "$($_.Bounds.Width) x $($_.Bounds.Height) ($monitor_orientation)"
    $monitor_type + "(Bits Per Pixel)                  " + "$($_.BitsPerPixel)"
    $monitor_type + "(Working Area)                    " + "$($_.WorkingArea)"
    }
    )
    
    Write-Host "TOTAL SCREEN COUNT: $screen_cnt"
    $info_screens
    

    Output for the secondary monitor in landscape mode. 1920 x 1200

    # TOTAL SCREEN COUNT: 2
    # Primary Monitor    (Bounds)                          {X=0,Y=0,Width=2560,Height=1600}
    # Primary Monitor    (Primary)                         True
    # Primary Monitor    (Device Name)                     \\.\DISPLAY1
    # Primary Monitor    (Bounds Width x Bounds Height)    2560 x 1600 (Landscape)
    # Primary Monitor    (Bits Per Pixel)                  32
    # Primary Monitor    (Working Area)                    {X=0,Y=0,Width=2560,Height=1560}
    # Secondary Monitor  (Bounds)                          {X=2560,Y=0,Width=1920,Height=1200}
    # Secondary Monitor  (Primary)                         False
    # Secondary Monitor  (Device Name)                     \\.\DISPLAY2
    # Secondary Monitor  (Bounds Width x Bounds Height)    1920 x 1200 (Landscape)
    # Secondary Monitor  (Bits Per Pixel)                  32
    # Secondary Monitor  (Working Area)                    {X=2560,Y=0,Width=1920,Height=1160}
    

    Output for the secondary monitor in portrait mode. 1200 x 1920

    # TOTAL SCREEN COUNT: 2
    # Primary Monitor    (Bounds)                          {X=0,Y=0,Width=2560,Height=1600}
    # Primary Monitor    (Primary)                         True
    # Primary Monitor    (Device Name)                     \\.\DISPLAY1
    # Primary Monitor    (Bounds Width x Bounds Height)    2560 x 1600 (Landscape)
    # Primary Monitor    (Bits Per Pixel)                  32
    # Primary Monitor    (Working Area)                    {X=0,Y=0,Width=2560,Height=1560}
    # Secondary Monitor  (Bounds)                          {X=2560,Y=0,Width=1200,Height=1920}
    # Secondary Monitor  (Primary)                         False
    # Secondary Monitor  (Device Name)                     \\.\DISPLAY2
    # Secondary Monitor  (Bounds Width x Bounds Height)    1200 x 1920 (Portrait)
    # Secondary Monitor  (Bits Per Pixel)                  32
    # Secondary Monitor  (Working Area)                    {X=2560,Y=0,Width=1200,Height=1880}
    
    0 讨论(0)
提交回复
热议问题