28. juni 1999 - 17:27Der er
8 kommentarer og 1 løsning
Ændring af skærmens farvedybde (BPP)
Hvordan ændre jeg skærmens farvedybde UDEN at skulle genstarte computeren (á la QuickRes). Jeg har prøvet med ChangeDisplaySettingsA, men den kræver også genstart.
Med de drivere jeg har til mit Matrox Mystique er det muligt at skifte skærm-dybde uden at genstarte. Derfor er mit gæt at det kommer an på driverne og kortet.
Det det handler om er at jeg selv er midt at lave et program hvor bl.a. muligheden for at skifte skærmindstillinger (opløsning og farvedybde) er med. Jeg ved det kan lade sig gøre (QuickRes / DirectX) med jeg ved ikke hvordan.... Win32 API funktionen ChangeDisplaySettings (CDS) skulle kunne klare skæren, men den tillader ikke at skifte farvedybde uden at man genstarter. Jeg har hørt at der findes en ikke dokumenteret flag til CDS (CDS_FORCE = $80000000). Hvis jeg bruger den som parameter resulterer det da godt nok i den ønskede ændring af farvedybden men også i at hele Windows fryser... fuldstændig - og det er ligesom ikke acceptabelt :)
Jeg har tænkt på om man kunne bruge DirectX til at lave selve skiftet med og så få CDS til at sende en message til alle vinduer - og derved "narre" windows til at tro at det er blevet gjort på "lovlig" vis?
Som du selv er inde på MÅ det kunne lade sig gøre på en eller anden vis, siden QuickRes kan. Det har intet med driveren at gøre, for så vidt. I Win 95 var QuickRes et "hack", lavet af Windows-kerne programmørerne, og brugte derfor ret sikkert udokumenterede features for at få det til at virke. I 98 er dette hack implementeret, men det betyder ikke at det er mere dokumenteret. Alt i alt skal du have fat i nogle udokumenterede parametere eller kald for at kunne gøre det, og hvor man får fat i dem...
Mht. at bruge DirectX til det er det ikke en mulighed. DirectX kan sagtens lave skiftet, men det virker KUN for det enkelte program og kun hvis den kører i fullscreen mode. Man kan desværre ikke pådutte andre programmer dine DirectX indstillinger.
Det er meget simpelt, den funktion er godt nok udokumenteret i win95 men i win95b er den dokumenteret! Jeg ved godt nok ikke mere om den men prøv at anskaffe b versionen!
Bruger allerede b-versionen, men det virker ikke af den grund... :(
QuickRes kalder 16-bit versionen af CDS direkte (32-bit versionen CDS kalder 16-bit versionen), men jeg kan ikke få Delphi til at kalde 16-bit versionen... På nogen som helst måde... har både prøvet med "function .. external .." og med "LoadLibrary". Med LoadLibrary får jeg en Handle = 0 hvis jeg indlæser USER.EXE (som eksporterer CHANGEDISPLAYSETTINGS) og med function .. external .. får jeg bare en dialogbox der siger at filen er beskadiget eller et eller andet jeg ikke kan huske - har prøvet med 127 forskellige parameter-kombinationer og med "call-type" som ALLE mulighederne (stdcall,pascal osv.)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.