Deutsch
Quelltexte/ Codesnippets

Bildschirmauflösung ändern / Vollbild / Fullscreen 2021

 

Sven
Bader
Aus irgendeinem Grund funktionierte das Ändern der Bildschirmauflösung in meinen alten Spielen nicht mehr, sowohl mit der Windows API als auch mit der prospeed.dll nicht. Der herangehensweise ist normalerweise, die Bildschirmeinstellungen per EnumDisplaySettings zu holen und in dem Bereich nur die Werte für die Bildschirmauflösung anzupassen und alles andere unberührt zu lassen.

Zum Debuggen habe ich EnumDisplaySettings ausgeführt während ein anderes Spiel die Auflösung korrekt geändert hat. So kam ich darauf, dass mein Monitor die 60Hz Bildwiederholrate, welche bei 1920x1200 Standard sind bei 640x480 nicht unterstützt.

Mein Code ist auch nicht perfekt, er testet lediglich geläufige Bildwiederholraten und wählt bei einem Auflösungswechsel die höchste. "Exotische" Bildwiederholraten werden also nicht berücksichtigt.

Ein weiterer Fehler, der häufig begangen wird, ist die Fullscreen Flag &CDS_FULLSCREEN zu vergessen. Diese sagt aus, dass die Auflösung nicht dauerhaft für den Desktop-Einsatz sondern lediglich für die Dauer der Programmausführung geändert werden soll. So wird bei einem Programmabsturz oder unsauberen Beenden die ursprüngliche Auflösung des System wiederhergestellt. Ich meine, dass auch ein Effekt auf fremde Fenster (verkleinern) und das Verschieben von Desktop Icons so verhindert wird.
DEF EnumDisplaySettings(3) !"USER32","EnumDisplaySettingsA"
DEF ChangeDisplaySettings(2) !"USER32","ChangeDisplaySettingsA"
Declare devmode#,devmodeoriginal#,fehl&
Dim devmode#,148
Dim devmodeoriginal#, 148

Proc ChangeRes2021

    Parameters x&, y&
    declare hz&[8]
    hz&[1] = 360
    hz&[2] = 240
    hz&[3] = 144
    hz&[4] = 120
    hz&[5] = 75
    hz&[6] = 60
    hz&[7] = 59
    Def &CDS_UPDATEREGISTRY       $00000001
    Def &CDS_TEST                 $00000002
    Def &CDS_FULLSCREEN           $00000004
    Def &CDS_GLOBAL               $00000008
    Def &CDS_SET_PRIMARY          $00000010
    Def &CDS_RESET                $40000000
    Def &CDS_SETRECT              $20000000
    Def &CDS_NORESET              $10000000

    if ((x& = 0) | (y& = 0))

        ChangeDisplaySettings(devmodeoriginal#,0)

    else

        EnumDisplaySettings(0, -1 ,devmode#)
        long devmode#,104=%BitsPixel
        long devmode#,108=x&
        long devmode#,112=y&
        fehl& = -2

        whileloop 7

            long devmode#,120 = hz&[&loop]
            fehl& = ChangeDisplaySettings(devmode#,&CDS_TEST)

            if (fehl& = 0)

                'messagebox Str$(hz&[&loop])+ "Hz is the highest working refresh rate","",0
                fehl& = ChangeDisplaySettings(devmode#,&CDS_FULLSCREEN)
                break

            endif

        endwhile

    endif

Endproc

cls
ChangeRes2021(1024,768)
settimer 10000'nach 10 Sekunden wiederherstellen
waitinput
killtimer
end
 
15.09.2021  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.510 Betrachtungen

Unbenanntvor 0 min.
Sven Bader01.02.2023
Ernst29.05.2022
Thomas Freier18.02.2022
p.specht18.11.2021
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

Sven Bader (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie