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
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}
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;
1600 x 900 x 4294967296 colors
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
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
::****************************************************