Wie bekomme ich per VBS-Skript ALLE möglichen Auflösungen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

videocontroller Auflösungen auflisten.

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
  'frage  alle Videomodi mit TrueColor und NoInterleased ab
Set colItems = objWMIService.ExecQuery("Select * from CIM_VideoControllerResolution where NumberOfColors=4294967296 and ScanMode=4",,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

...natürlich werde ich keine Zeit und mühe in den alten Schrott investieren. Ich programmiere seit 35 Jahren und weine dem alten Kram keine Träne nach. Ich kann nicht verstehen, weshalb Du als Anfänger versuchst ein "totes Pferd" zu reiten. Selbst alte Hasen, wie ich, schätzen die Vorzüge moderner im System integrierter Sprachen wie C# oder Powershell, selbst wenn ich noch mit dem Scriptinghost kleine HilfsScripte für Batch ausführe, nutze ich JavaScript. Ich bin zwar kein Fan von Python, aber selbst Dieses ist besser als VBS.

Ich habe Dir bereits vor Monaten mitgeteilt, das VBScript ein Sprache auf dem sterbenden Ast ist. Kein Mensch erschafft neues mit VBS. Seit 10 Jahren schreibt jeder nur noch irgendwelche alten Scriptzeilen ab.

...Und natürlich ist es nicht möglich aus VBScript heraus den Bildschirmmodus zu ändern. (außer Fremdprogramme oder Registrypfrimelei)

Dein Problem lässt sich übrigens nicht durch Umschalten auf eine andere Auflösung ändern.

Im Setup Deiner Grafikkarte gib es eine Option, welche angibt, wie nichtbildfüllende Formate/Vollbildmodi zu handhaben sind.

Bild zum Beitrag

...auch AMD hat eine adäquate Option.

 - (Computer, Technik, Spiele und Gaming)

Dragodraki 
Fragesteller
 27.12.2020, 13:24

Vielen Dank für deine Hilfe. Gründe, warum ich VBS nicht weg kann: Programmieren in richtiger Sprache kann ich nicht, habs versucht. Skriptsprache soll umstandslos auch auf Windows XP bis Windows 10 gleichermaßen laufen können. Und ich will kein Powershell, da das immer beliebter für Malwarexploits wird, habs daher in den Gruppenrichtlinien deaktiviert. Auch VBS habe ich sicherheitshalber so konfiguriert, dass es nur mit bestimmten Parametern läuft, sonst startet es nicht. CMD wäre gute Alternative, aber Fenstermodus nervt mich manchmal.

Vielleicht kannst du jetzt verstehen, warum es ausgerechnet VBS sein muss. Hast du einen anderen Vorschlag, der alle diese Bedingungen abdeckt, nehme ich ihn gerne an...

Zu dem Code von dir: Ich bekomme bis jetzt nur die niedrigste Option mit 640x480 raus, andere werden nicht aufgelistet. Bis jetzt gut, jetzt muss ich nur noch an die anderen herankommen.

0
Dragodraki 
Fragesteller
 27.12.2020, 13:33
@Dragodraki
Habs jetzt, der leere "Wscript.Echo" am Ende sollte weg und ich habs zusätzlich alle o.g. durch "msgbox" ersetzt - jetzt klappt es :). Tausend Dank!
0

Hi Leute,

@Erzesel: Danke für deinen Skriptentwurf. Konnte das Problem damit lösen.

ich habe die VBS jetzt ausgebaut und es funktioniert wie gewünscht. Für alle, die es interessiert, hier ist mein fertiges Skript (Hinweis: Für die Variablen "Mindestbreite", "Mindesthoehe" und "Seitenverhaeltnis" bitte eigene Werte eintragen!).

Codebefehle und -syntax sind ggf. umständlich, aber es funktioniert:

Option Explicit
On Error Resume Next
'RequireAdmin

dim objWMIService, colItems, objItem, LastResolutionShowed, AllResolutionList, AndereAufloesung, Mindestbreite, Mindesthoehe, Seitenverhaeltnis, Result, Aufloesungstest, Horizontale, Vertikale, AufloesungCheckpoint

' ---------------------------------------------------------------------------------------------------
' ---------------------------------------------------------------------------------------------------
AndereAufloesung = "Ja"    ' [Ja/Nein] Auflösung ändern ("Ja", wenn Spiel Auflösung/Seitenverhältnis nicht korrekt darstellt)
Mindestbreite = "800"    ' optional: Niedrigste bildschirmfüllendste Auflösung (Breite), bevor Spiel Fehler bekommt (z.B. "720")
Mindesthoehe = "600"    ' optional: Niedrigste bildschirmfüllendste Auflösung (Höhe), bevor Spiel Fehler bekommt (z.B. "480")
Seitenverhaeltnis = "4:3"    ' optional: Erzwinge bestimmtes Seitenverhältnis, um Strecken/Stauchung zu vermeiden (z.B. "4:3" / "3:2")
' ---------------------------------------------------------------------------------------------------
' ---------------------------------------------------------------------------------------------------


Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
  'frage  alle Videomodi mit TrueColor und NoInterleased ab
Set colItems = objWMIService.ExecQuery("Select * from CIM_VideoControllerResolution where NumberOfColors=4294967296 and ScanMode=4",,48)


For Each objItem in colItems
    if objItem.HorizontalResolution & " x " & objItem.VerticalResolution = LastResolutionShowed then
    else
    LastResolutionShowed = objItem.HorizontalResolution & " x " & objItem.VerticalResolution
    'msgbox "Resolution: " & LastResolutionShowed
        'msgbox "Number Of Colors: " & objItem.NumberOfColors
        'msgbox "Refresh Rate: " & objItem.RefreshRate
        'msgbox "Scan Mode: " & objItem.ScanMode
        'msgbox "Setting ID: " & objItem.SettingID
    AllResolutionList = AllResolutionList & vbCrLf & LastResolutionShowed
    end if
Next

msgbox AllResolutionList





'--- BESTIMME AUFLÖSUNG, WENN -AndereAufloesung- JA IST

if AndereAufloesung = "Ja" OR AndereAufloesung = "ja" then

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
  'frage  alle Videomodi mit TrueColor und NoInterleased ab
Set colItems = objWMIService.ExecQuery("Select * from CIM_VideoControllerResolution where NumberOfColors=4294967296 and ScanMode=4",,48)

For Each objItem in colItems

    Horizontale = objItem.HorizontalResolution
    Vertikale = objItem.VerticalResolution
    ' Verhindere, dass gleiche Auflösungsmöglichkeiten mehrfach ausgegeben wird
    if Horizontale & " " & Vertikale = LastResolutionShowed then
    else
    LastResolutionShowed = Horizontale & " " & Vertikale
    ' msgbox "------- " & LastResolutionShowed & " -------"

    ' Aufloesungstest_1: Ist ein bestimmtes Seitenverhältnis vorgegeben und wenn ja, passt die Auflösung dazu?
    If IsNull(Seitenverhaeltnis) Or IsEmpty(Seitenverhaeltnis) Or Seitenverhaeltnis= "" Then
    Aufloesungstest = Horizontale & " " & Vertikal
    else
    Seitenverhaeltnis=Replace(Seitenverhaeltnis,":","/")
    ' Konvertiere Zahlen aus dem String -Seitenverhaeltnis- zur mathematischen Division
    result= nothing
    result = left(Seitenverhaeltnis, instr(Seitenverhaeltnis, "/")-1) / right(Seitenverhaeltnis, len(Seitenverhaeltnis)-instr(Seitenverhaeltnis, "/"))
    ' Vergleiche Division -Seitenverhältnis- mit der aus der Division der Auflösung
    if Horizontale / Vertikale = result Then
    ' msgbox "Super: Seitenverhältnis ist " & Seitenverhaeltnis
    Aufloesungstest = Horizontale & " " & Vertikale
    else
    Aufloesungstest = ""
    end if
    end if

    ' Aufloesungstest_2: Ist eine bestimmte Mindesthöhe vorgegeben und wenn ja, ist die Vertikale der Auflösung mindestens genauso groß?
    If IsNull(Mindesthoehe) Or IsEmpty(Mindesthoehe) Or Mindesthoehe = "" OR IsNull(Aufloesungstest) Or IsEmpty(Aufloesungstest) Or Aufloesungstest= "" Then
    else
    ' Wandle String in Zahl um
    Mindesthoehe = Mindesthoehe+0
    ' Verifiziere, dass vorgeschlagene Auflösung die Mindesthöhe nicht unterschreitet
    if Mindesthoehe > Vertikale Then
    'msgbox "Achtung: Mindesthöhe wurde unterschritten! Variable -Aufloesungstest- wird gelöscht"
    Aufloesungstest = ""
    else
    Aufloesungstest = Horizontale & " " & Vertikale
    end if
    end if

    ' Aufloesungstest_3: Ist eine bestimmte Mindestbreite vorgegeben und wenn ja, ist die Horizontale der Auflösung mindestens genauso groß?
    If IsNull(Mindestbreite) Or IsEmpty(Mindestbreite) Or Mindestbreite= "" OR IsNull(Aufloesungstest) Or IsEmpty(Aufloesungstest) Or Aufloesungstest= "" Then
    else
    ' Wandle String in Zahl um
    Mindestbreite = Mindestbreite+0
    ' Verifiziere, dass vorgeschlagene Auflösung die Mindestbreite nicht unterschreitet
    if Mindestbreite > Horizontale Then
    'msgbox "Achtung: Mindestbreite wurde unterschritten! Variable -Aufloesungstest- wird gelöscht"
    Aufloesungstest = ""
    else
    Aufloesungstest = Horizontale & " " & Vertikale
    end if
    end if

    ' Ergebnis der Tests und Prüfen, ob diese Auflösung noch besser ist als vorige die Test bestanden haben
    If IsNull(Aufloesungstest) Or IsEmpty(Aufloesungstest) Or Aufloesungstest= "" Then
    ' msgbox "Diese Auflösung hat mind. 1 der drei Anforderungen nicht erfüllt."
    else
    ' Wenn neue Pixelsumme -Aufloesungstest- trotz Tests 1-3 niedriger ist als -AufloesungCheckpoint-, überschreibe -AufloesungCheckpoint-
    if Vertikale * Horizontale < left(AufloesungCheckpoint, instr(AufloesungCheckpoint, " ")-1) * right(AufloesungCheckpoint, len(AufloesungCheckpoint)-instr(AufloesungCheckpoint, " ")) OR IsNull(AufloesungCheckpoint) Or IsEmpty(AufloesungCheckpoint) Or     AufloesungCheckpoint= "" Then
    AufloesungCheckpoint = Aufloesungstest
    end if
    end if

    end if
Next


If IsNull(AufloesungCheckpoint) Or IsEmpty(AufloesungCheckpoint) Or AufloesungCheckpoint= "" Then
msgbox "Keine perfekte Auflösung möglich."
else
Resolution = AufloesungCheckpoint
msgbox "Nativste Auflösung aus den vorgegebenen Anforderungen ist: " & AufloesungCheckpoint
end if


else
end if    ' egal, ob -AndereAufloesung- "Ja" oder "Nein" hat