wake-up-neo.net

Holen Sie sich die Bildschirmauflösung mit WMI/Powershell in Windows 7

Ich verwende das folgende Skript, um unter WMI eine Bildschirmauflösung in Windows zu erhalten. Das Skript funktioniert gut, wenn sich der Computer im Querformat befindet, gibt jedoch im Hochformat falsche Werte zurück. Funktioniert einwandfrei in XP und hat nicht in Vista versucht. Kann jemand bestätigen, dass dies ein Fehler in Windows 7 WMI ist.

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
14
user281693

Für den Datensatz lautet der PowerShell-Code:

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

Ich bekomme die gleichen Werte im Querformat oder im Hochformatmodus.

UPDATE:

In einer Multi-Monitor-Umgebung können Sie die Informationen für alle Monitore abrufen mit:

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}
29
Shay Levy

Sie können dies aus der WMI-Klasse Win32_VideoController entnehmen. Die Eigenschaft VideoModeDescription enthält die Bildschirmauflösung und die Farbtiefe.

(Get-WmiObject -Class Win32_VideoController).VideoModeDescription;

Ergebnis

1600 x 900 x 4294967296 colors
9
Trevor Sullivan

Gleich wie die anderen Antworten, jedoch für das einfache cmd:

wmic path Win32_VideoController get VideoModeDescription

Die Antwort von @Shay Levy meldet genau die Breite/Höhe, die aktiv war, als die Powershell-Sitzung gestartet wurde. Wenn Sie den Monitor nach dem Start von PS drehen, werden weiterhin die ursprünglichen und jetzt falschen Werte gemeldet.

Das System Information Die Klasse bietet eine andere Möglichkeit zur Orientierung und ändert sich in der aktuellen PS-Sitzung, auch wenn die Anzeige nach dem Sitzungsstart gedreht wird.

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SystemInformation]::ScreenOrientation
Angle0

[System.Windows.Forms.SystemInformation]::PrimaryMonitorSize
IsEmpty                            Width                           Height
-------                            -----                           ------
False                              1680                             1050

Monitor drehen, dann ...

[System.Windows.Forms.SystemInformation]::ScreenOrientation
Angle90

[System.Windows.Forms.SystemInformation]::PrimaryMonitorSize
IsEmpty                            Width                           Height
-------                            -----                           ------
False                              1050                             1680

https://msdn.Microsoft.com/de-DE/library/system.windows.forms.systeminformation(v=vs.110).aspx

3
Clayton

Das ist mein Versuch:

@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