Einzelnen Beitrag anzeigen

Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#1

Auflösung,Frequenz,Icons wiederherstellen ?

  Alt 26. Dez 2005, 18:17
hallo,

muetze1 hat einen code von ferby modifiziert " Auflösung und Frequenz ändern, Desktopicons sichern und alles dann wiederherstellen !

Delphi-Quellcode:
Uses
  ShellAPI,
  registry; // auch wenn du es nicht wolltest, nun hast doch ein wenig Registry mit drinne - aber nur lesen...

....

Var
  ScreenAlt: TPoint; // diese solltest du schon haben
  ScreenAltFrequenz : Integer; // diese kommt neu hinzu

Function ChangeScreen(AWidth, AHeight: Word; AFrequenz: Integer; Const APfad: string): Boolean;
  // modified by Muetze1
Const
  ENUM_CURRENT_SETTINGS : Cardinal = Cardinal(-1);//$ffffffff; // = -1
Var
  lpDevMode: TDeviceMode;
  saveiconherstellen: boolean;
  lRegInfo : TRegistry;
Begin
  saveiconherstellen := false;

  If ( AWidth <> 0 ) Then
  Begin
    ScreenAlt.x := Screen.Width;
    ScreenAlt.y := Screen.Height;
    ScreenAltFrequenz := 0; // diese Variable noch definieren

    If ( EnumDisplaySettings(Nil, ENUM_CURRENT_SETTINGS, lpDevMode) ) Then
    Begin
      If ( ( lpDevMode.dmFields And DM_PELSWIDTH ) > 0 ) Then
        ScreenAlt.x := lpDevMode.dmPelsWidth;
      If ( ( lpDevMode.dmFields And DM_PELSHEIGHT ) > 0 ) Then
        ScreenAlt.y := lpDevMode.dmPelsHeight;
      If ( ( lpDevMode.dmFields And DM_DISPLAYFREQUENCY ) > 0 ) Then
        ScreenAltFrequenz := lpDevMode.dmDisplayFrequency
      Else If ( Win32Platform = VER_PLATFORM_WIN32_WINDOWS ) Then // Win9x/ME
      Begin
        lRegInfo := TRegistry.Create(KEY_READ);
        lRegInfo.RootKey := HKEY_CURRENT_CONFIG;
        Try
          If lRegInfo.OpenKey('\Display\Settings', False) Then
          Begin
            ScreenAltFrequenz := StrToIntDef(lRegInfo.ReadString('RefreshRate'), 0);
          End;
        Finally
          lRegInfo.CloseKey;
          lRegInfo.Free;
        End;
      End;
    End;

    ShellExecute(0, 'open', PChar(APfad + 'saveicon.exe'),'"\s"', nil, SW_Show);
    Sleep(1000);
  End
  Else
  Begin
    saveiconherstellen:=true;
    AWidth := ScreenAlt.X;
    AHeight := ScreenAlt.Y;
    AFrequenz := ScreenAltFrequenz;
  End;

  lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
  lpDevMode.dmPelsWidth := AWidth;
  lpDevMode.dmPelsHeight := AHeight;
  If ( AFrequenz > 20 ) Then // valid?
  Begin
    lpDevMode.dmDisplayFrequency := AFrequenz;
    lpDevMode.dmFields := lpDevMode.dmFields Or DM_DISPLAYFREQUENCY;
  End;
  Result := ChangeDisplaySettings(lpDevMode, CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL;

  If saveiconherstellen Then
    ShellExecute(0,'open', PChar(APfad + 'saveicon.exe'),'"\r"', nil, SW_Show);

  If Not Result Then
  Begin
    MessageBeep(MB_ICONERROR);
    MessageDlg('Fehler1' +#10#10+ 'Das Programm konnte die Auflösung nicht auf '+inttostr(AWidth)+'x'+inttostr(AHeight)+ ' umstellen.' +#10+ 'Es könnte sein das der Computer diese Auflösung nicht unterstützt' +#10+ 'Sollte der Computer diese Auflösung doch unterstüzen,' +#10+ 'dann stelle bitte die Auflösung manuel ein und starte das Spiel erneut.', mtError, [mbOK], 0);
    Application.Terminate;
  End;
End;
ich hab den code von muetze1 ausprobiert, das funzt,die auflösung und frequenz wird
umgestellt, aber wie bekomme ich die alten wieder zurück wenn ich mein programm schließe


1. ist mein funktionsaufruf so richtig ?

ChangeScreen(800,600,85,'c:\saveicon.exe') 2.welchen code muß ich in das ereigniss "onclose" schreiben, das meine alten einstellungen
wiederhergestellt werden ?

mfg vader
  Mit Zitat antworten Zitat