![]() |
Wie kann ich die Bildschirmauflösung ändern? [Erweiterung]
Eine kleine Erweiterung, um die Auflösung von Multimonitoren zu ändern.
Delphi-Quellcode:
type
TMultiMonFlag=(mmfTest, mmfStoreInRegistry, mmfResolution, mmfFrequency, mmfBitsPerPixel); TMultiMonFlags=set of TMultiMonFlag; function MultiMonitorChangeResolution(const MonitorID:Byte; const Width, Height:Word; const Frequency, BitsPerPixel:Byte; var DisplayName:String; const Flags:TMultiMonFlags):Boolean; var DevMode:TDeviceMode; DispDev:TDisplayDevice; cdsFlags:DWord; begin SetLastError(0); DisplayName:='<Error>'; DispDev.cb:=SizeOf(DispDev); Result:=EnumDisplayDevices(nil, MonitorID, DispDev, 0); If not Result then Exit; DisplayName:=DispDev.DeviceName; ZeroMemory(@DevMode, SizeOf(DevMode)); DevMode.dmSize:=SizeOf(DevMode); DevMode.dmPelsWidth:=Width; DevMode.dmPelsHeight:=Height; DevMode.dmBitsPerPel:=BitsPerPixel; DevMode.dmDisplayFrequency:=Frequency; DevMode.dmFields:=0; If mmfResolution in Flags then DevMode.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT; If mmfFrequency in Flags then DevMode.dmFields:=DevMode.dmFields or DM_DISPLAYFREQUENCY; If (mmfBitsPerPixel in Flags) and (BitsPerPixel in [8, 16, 24, 32]) then DevMode.dmFields:=DevMode.dmFields or DM_BITSPERPEL; cdsFlags:=CDS_FULLSCREEN; If mmfTest in Flags then cdsFlags:=CDS_TEST; If mmfStoreInRegistry in Flags then cdsFlags:=CDS_UPDATEREGISTRY; SetLastError(ChangeDisplaySettingsEx(DispDev.DeviceName, DevMode, 0, cdsFlags, nil)); Result:=(GetLastError=DISP_CHANGE_SUCCESSFUL); end;
Delphi-Quellcode:
MonitorID: Welcher Monitor soll umgeschalten werden? (0=Primärer)
function MultiMonitorChangeResolution(const MonitorID:Byte; const Width, Height:Word; const Frequency, BitsPerPixel:Byte; var DisplayName:String; const Flags:TMultiMonFlags):Boolean;
Width: Breite in Pixeln Height:Höhe in Pixeln Frequency: Bildwiederholfrequenz BitsPerPixel: Farbtiefe (8, 16, 24, 32 Bit) DisplayName: Rückgabe des Monitornamens Flags: - mmfTest: Prüfen, ob Einstellungen möglich sind (nichts wird verändert) - mmfStoreInRegistry: Einstellungen ändern und bei Erfolg speichern - mmfResolution: Auflösung entsprechend Width & Height setzen - mmfFrequency: Bildwiederholfrequenz setzen - mmfBitsPerPixel: Farbtiefe setzen Wird weder mmfTest noch mmfStoreInRegistry in Flags angegeben, so werden die Einstellung nur Temporär übernommen. Anwendungsbeispiel: Den 2. Monitor auf 800 x 600 Pixel bei 72 Hz und 32 Bit Farbtiefe setzen
Delphi-Quellcode:
Achtung!
procedure TForm1.Button1Click(Sender: TObject);
var DisplayName:String; begin MultiMonitorChangeResolution(1, 800, 600, 72, 32, DisplayName, [mmfStoreInRegistry, mmfResolution, mmfFrequency, mmfBitsPerPixel]); Case GetLastError of DISP_CHANGE_SUCCESSFUL: Label2.Caption:='DISP_CHANGE_SUCCESSFUL'; DISP_CHANGE_RESTART: Label2.Caption:='DISP_CHANGE_RESTART'; DISP_CHANGE_FAILED: Label2.Caption:='DISP_CHANGE_FAILED'; DISP_CHANGE_BADMODE: Label2.Caption:='DISP_CHANGE_BADMODE'; DISP_CHANGE_NOTUPDATED: Label2.Caption:='DISP_CHANGE_NOTUPDATED'; DISP_CHANGE_BADFLAGS: Label2.Caption:='DISP_CHANGE_BADFLAGS'; DISP_CHANGE_BADPARAM: Label2.Caption:='DISP_CHANGE_BADPARAM'; else Label2.Caption:=SysErrorMessage(GetLastError); end; Label1.Caption:=DisplayName; end; Das setzen falscher Bildschirmeinstellungen kann sehr sehr alte Monitore beschädigen! Aktuelle Monitore schalten sich bei Überlast normalerweise ab, notfalls muß im abgesichterten Modus neu gestartet weerden um die Einstellungen zurückzusetzen. Der 2. Monitor muß nicht zwingend die ID 1 haben, um herauszufinden welche ID Dein Wunschmonitor hat gehe in der Systemsteuerung auf Anzeige, wechslse zu Einstellungen und klicke Identifizieren. Ziehe von der angezeigten Zahl auf dem Wunschmonitor 1 ab und Du hast Deine ID. Gibst Du eine nicht vorhandene ID als Parameter an, so ist der Rückgabewert von DisplayName '<Error>' Sonstige Fehler kannst Du mit GetLastError abfragen: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz