Obtenir la résolution D'écran en utilisant WMI / powershell dans Windows 7

j'utilise le script suivant pour obtenir la résolution d'écran dans Windows en utilisant WMI. Le script fonctionne correctement lorsque l'ordinateur est en mode paysage, mais renvoie des valeurs incorrectes lorsque en mode portrait. Fonctionne correctement dans XP et n'a pas essayé dans Vista. Est-ce que quelqu'un peut confirmer qu'il s'agit d'un bug dans Windows 7 WMI.

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" & strComputer & "rootCIMV2") 
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
13
demandé sur user281693 2011-11-01 18:08:30

6 réponses

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

j'obtiens les mêmes valeurs en mode Paysage ou en mode Portrait.

mise à jour:

dans un environnement multi-moniteurs, vous pouvez obtenir les informations pour tous les moniteurs avec:

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
répondu Shay Levy 2012-09-27 17:48:38

Vous pouvez prendre cela à partir de l' Win32_VideoController classe WMI. VideoModeDescription propriété comprend la résolution d'écran et la profondeur de couleur.

(Get-WmiObject -Class Win32_VideoController).VideoModeDescription;

Résultat

1600 x 900 x 4294967296 colors
8
répondu Trevor Sullivan 2014-03-31 21:23:34

identique aux autres réponses, cependant pour le cmd simple:

wmic path Win32_VideoController get VideoModeDescription

3
répondu Vlastimil Ovčáčík 2014-05-14 19:12:19

la réponse de@Shay Levy ci-dessus rapporte avec précision la largeur/hauteur qui était active lorsque la session powershell a été lancée. Si vous tournez le moniteur après le lancement de PS, il continue à signaler les valeurs originales, maintenant incorrectes.

SystemInformation class fournit une autre façon d'obtenir l'orientation, et il change dans la session PS actuelle même si l'affichage est tourné après le lancement de la session.

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

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

Moniteur de rotation, puis...

[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
répondu Clayton 2016-08-02 21:19:03

C'est mon essayer :

@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
répondu Hackoo 2018-04-12 08:54:57

Vous pouvez obtenir toute la résolution disponible avec cette commande:

$Query = "SELECT * FROM CIM_VideoControllerResolution"
$res = Get-WMIObject -query $Query | Select Caption
-1
répondu S0me0ne 2012-05-09 16:32:58