Wie ermittle ich per VBS max. Farbtiefe + FPS für: 800x600p?

2 Antworten

Necromancer...Leichen fleddern bis zum bitteren Ende😅

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
selctItems = "*"
QueryFilter = "where HorizontalResolution=800 and VerticalResolution=600"
Set colItems = objWMIService.ExecQuery("Select " & selctItems & " from CIM_VideoControllerResolution "& QueryFilter,,48)

For Each objItem in colItems
    Wscript.Echo "Horizontal Resolution: " & objItem.HorizontalResolution
    Wscript.Echo "Number Of Colors: " & objItem.NumberOfColors
    Wscript.Echo "Refresh Rate: " & objItem.RefreshRate
    Wscript.Echo "Scan Mode: " & objItem.ScanMode
    Wscript.Echo "Setting ID: " & objItem.SettingID
    Wscript.Echo "Vertical Resolution: " & objItem.VerticalResolution
    Wscript.Echo
Next

In Powershell sähe obiges so aus:

Get-CimInstance -Class CIM_VideoControllerResolution -Filter "HorizontalResolution=800 and VerticalResolution=600"

Komplett inklusive der Ermittlung des Höchsten 800x600 Modus sähe es dann so aus.

$Highest800x600 = Get-CimInstance -Class CIM_VideoControllerResolution -Filter "HorizontalResolution=800 and VerticalResolution=600"| #alle 800x600 Modi
  select -Property SettingID,HorizontalResolution,VerticalResolution,NumberOfColors,RefreshRate,ScanMode | #Nur die gelisteten Felder weiterreichen
  sort -property NumberOfColors,RefreshRate -Descending| #Sortiere nach Farben und Frequenz höchste zuerst
  select -first 1 #da der nun 800x600 mit den meisten Farben/Freqenz ganz "vorn" steht, brauchen  wir nur das erste Objekt

'the highest 800x600 Mode is:'
$Highest800x600
pause

Ich möchte nie wieder zurück nach dem umständlichen VBS🤮

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Dragodraki 
Fragesteller
 20.11.2021, 16:12

Danke, ich habe das Skript nochmal etwas weiter ausgesponnen.

Und ja, derzeit muss ich leider mit VBS weiterarbeiten, weil ich damit auch begonnen habe.

0
On Error Resume Next
dim list_refreshrate, list_colordepth, resolution
Resolution = "800 600"

'Setze Minimum fps=30, da der Wert sonst 0 ist
list_refreshrate = 30
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
    ("Select * from CIM_VideoControllerResolution")
For Each objItem in colItems


' Wandle Anzahl der Farben in Bit (bbp) um (Res-o-Matic kann nur 8,16,32 Bit)
if objItem.NumberOfColors = 256 Then
list_colordepth = 8
End if
if objItem.NumberOfColors = 65536 Then
list_colordepth = 16
End if
if objItem.NumberOfColors = 4294967296 Then
list_colordepth = 32
End if

    if (objItem.HorizontalResolution & " " & objItem.VerticalResolution) = Resolution Then
        'msgbox objItem.HorizontalResolution & "x" & objItem.VerticalResolution & " --- Farbtiefe: " & objItem.NumberOfColors & " Refresh Rate: " & objItem.RefreshRate
    if objItem.RefreshRate > list_refreshrate Then
           list_colordepth = objItem.NumberOfColors
           list_refreshrate = objItem.RefreshRate
    end if
    if objItem.NumberOfColors > list_colordepth Then
           list_colordepth = objItem.NumberOfColors
           list_refreshrate = objItem.RefreshRate
    end if
    End if
Next

msgbox "Maximalwerte --- Farbtiefe:" & list_colordepth & " FPS:" & list_refreshrate