我試圖獲得我使用WMI的兩臺顯示器的最大支持分辨率(因爲它將成爲VBScript的一部分)我嘗試了以下WMI命令,但我得到一個錯誤的結果或只獲得一臺顯示器的信息。獲取所有連接的顯示器的最大支持分辨率
C:\>wmic path win32_videocontroller get videomodedescription /format:list
VideoModeDescription=1366 x 768 x 4294967296 colors
C:\>wmic path win32_displaycontrollerconfiguration get videomode /format:list
VideoMode=1024 by 768 pixels, True Color, 60 Hertz
根據顯示設置,我的筆記本電腦顯示器是1366×768 ...不知道哪裏WMI從得到1024×768。另外,如果我改變我的筆記本電腦顯示器的分辨率顯示設置爲800x600,我得到這個:
C:\>wmic path win32_videocontroller get videomodedescription
VideoModeDescription=800 x 600 x 4294967296 colors
這樣準確地報告我當前的分辨率的命令不告訴我,我的最大分辨率是什麼。 (我不在乎愚蠢的最終用戶是否將他們的分辨率降低,我只想知道他們的顯示器支持哪種分辨率。)
正如您所看到的,到目前爲止,這些方法都沒有向我展示任何關於外部顯示器的信息我也附加到我的筆記本電腦上。如果我使用Win32_DesktopMonitor
,我可以獲得關於外部顯示器的各種信息,但不是其分辨率。
C:\>wmic path win32_desktopmonitor get /format:list
Availability=8
Bandwidth=
Caption=HP L1710 LCD Monitor
ConfigManagerErrorCode=0
ConfigManagerUserConfig=FALSE
CreationClassName=Win32_DesktopMonitor
Description=HP L1710 LCD Monitor
DeviceID=DesktopMonitor1
DisplayType=
ErrorCleared=
ErrorDescription=
InstallDate=
IsLocked=
LastErrorCode=
MonitorManufacturer=Hewlett-Packard
MonitorType=HP L1710 LCD Monitor
Name=HP L1710 LCD Monitor
PixelsPerXLogicalInch=96
PixelsPerYLogicalInch=96
PNPDeviceID=DISPLAY\HWP26EB\4&298A3A3E&0&UID16843008
PowerManagementCapabilities=
PowerManagementSupported=
ScreenHeight=
ScreenWidth=
Status=OK
StatusInfo=
SystemCreationClassName=Win32_ComputerSystem
那麼,有沒有使用VBScript的方式(通過WMI與否)讓每一個連接的顯示器的最大支持的分辨率?
更新:我只是跑此針對在用戶具有直接插入他們的筆記本電腦的外部監視器,而礦插入對接站的遠程計算機。
C:\>winrs -r:remotehostname wmic path win32_videocontroller get videomodedescription
VideoModeDescription
1920 x 1080 x 4294967296 colors
1440 x 900 x 4294967296 colors
更新過的2:使用WMI Explorer我發現這個命令,其顯示每個受支持的模式。輸出時間太長而無法發佈,但我已將輸出包括在一個受支持的模式中。
wmic /namespace:\\ROOT\WMI path WmiMonitorListedSupportedSourceModes get MonitorSourceModes /format:list
__PATH=
__NAMESPACE=
__SERVER=
__DERIVATION={}
__PROPERTY_COUNT=28
__RELPATH=
__DYNASTY=VideoModeDescriptor
__SUPERCLASS=
__CLASS=VideoModeDescriptor
__GENUS=2
CompositePolarityType = 2
HorizontalActivePixels = 1366
HorizontalBlankingPixels = 160
HorizontalBorder = 0
HorizontalImageSize = 310
HorizontalPolarityType = 1
HorizontalRefreshRateDenominator = 763
HorizontalRefreshRateNumerator = 24100000
HorizontalSyncOffset = 48
HorizontalSyncPulseWidth = 32
IsInterlaced = False
IsSerrationRequired = 2
IsSyncOnRGB = 2
Origin = 2
PixelClockRate = 48200000
StereoModeType = 0
SyncSignalType = 3
TimingType = 4
VerticalActivePixels = 768
VerticalBlankingPixels = 22
VerticalBorder = 0
VerticalImageSize = 174
VerticalPolarityType = 1
VerticalRefreshRateDenominator = 60277
VerticalRefreshRateNumerator = 2410000
VerticalSyncOffset = 3
VerticalSyncPulseWidth = 5
VideoStandardType = 0
HorizontalActivePixels
和VerticalActivePixels
給我,我要找的尺寸。有兩個WmiMonitorListedSupportedSourceModes
類的實例,每個顯示器一個。現在的問題是如何通過MonitorSourceModes
數組來查找每個實例的最大分辨率。 :(
對於任何人尋找的VBScript相當於@TessellatingHeckler的優秀PowerShell的答案:
strComputer = "."
strQuery = "SELECT PreferredMonitorSourceModeIndex, MonitorSourceModes " & _
"FROM WmiMonitorListedSupportedSourceModes"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\ROOT\WMI")
Set colItems = objWMIService.ExecQuery(strQuery, , 48)
For Each objItem In colItems
intIndex = objItem.PreferredMonitorSourceModeIndex
Wscript.StdOut.WriteLine "InstanceName: " & _
objItem.InstanceName
Wscript.StdOut.WriteLine "Horizontal: " & _
objItem.MonitorSourceModes(intIndex).HorizontalActivePixels
Wscript.StdOut.WriteLine "Vertical: " & _
objItem.MonitorSourceModes(objIintIndex).VerticalActivePixels
Wscript.StdOut.WriteLine "__________"
Next
從[這裏](https://blogs.technet.microsoft.com/heyscriptingguy/2013/10/03/use-powershell-to-discover-multi-monitor-信息/)是一個查詢,它至少列出了我所有的監視器:'gwmi -Query'select * from Win32_PnPEntity where service =「monitor」''。也以管理員身份運行'gwmi -N「root \ wmi」wmiMonitorID'列出所有監視器。 WMI類「WmiMonitorBasicDisplayParams」將以釐米爲單位顯示最大圖像大小...。我只是從這些https://msdn.microsoft.com/en-us/library/windows/desktop/aa392707(v=vs.85).aspx(在我的評論中編輯:PowerShell)中找到更新2中的類。 – TessellatingHeckler