Einzelnen Beitrag anzeigen

Benutzerbild von colder
colder

Registriert seit: 23. Jul 2004
Ort: Bonn
30 Beiträge
 
Delphi 7 Professional
 
#1

Themes, Schemes, Apperance

  Alt 13. Dez 2006, 15:17
Hallo,

Ich versuche Einstellungen betr. der Desktop-Darstellung zu sichern
und wiederherzustellen.

1.Wie kann ich mit Delphi-Code z.B. auslesen (XP) welches Design aktiviert
ist.

2.Wie kann ich ein bestimmtes Design aktivieren.

3.Wie kann ich das Farbschema ändern.

Code:
function SchemeSwitcher:LongInt;
Var
   Handle           : THandle;
   DeskSetCurrentScheme: TDeskSetCurrentScheme;
Begin
   sSchemeName := GetSchemeName(sSchemeName);
   Handle := LoadLibrary('desk.cpl');
   If Handle <> 0 Then Begin
      DeskSetCurrentScheme := GetProcAddress(Handle, 'DeskSetCurrentScheme');
      Try
         Result := DeskSetCurrentScheme(sSchemeName);
      Except
      End;
   End;
end;
hiermit lassen sich z.B. Schemes umschalten, funktioniert allerdings nicht mit allen.

Code:
Procedure ThemeSwitcher;
Var
   wnd: HWND;
   sRunDLL: String;
   sParam: String;
   bEnd: Boolean;
Begin
   bEnd := False;
   wnd := 0;
   If GetSystemDefaultLCID = 1031 Then Begin
      If IsWinXP Then
         sDialogName := sDialogNameDE_XP
      Else
         sDialogName := sDialogNameDE_Vista;
   End Else Begin
      If IsWinXp Then
         sDialogName := sDialogNameEN_XP
      Else
         sDialogName := sDialogNameEN_Vista;
   End;
   sRunDLL := 'C:\WINDOWS\system32\rundll32.exe';
   sParam := Format('C:\WINDOWS\system32\shell32.dll,Control_RunDLL C:\WINDOWS\system32\desk.cpl desk,@Themes /Action:OpenTheme /file:"%s"', [sThemeFileEnv]);
   Try
      ShellExec(0, 'open', sRunDLL, sParam, '', SW_HIDE);
   Except
   End;
   While Not bEnd Do Begin
      Sleep(200);
      If sDialogName <> '' Then
         wnd := FindWindowByTitle(sDialogName);
      If wnd <> 0 Then
         ShowWindow(wnd, SW_HIDE);
      If sControlName <> '' Then
         bEnd := ClickButton(wnd, sControlName);
   End;
End;
Hiermit lässt sich z.B. ein Design umschalten. Allerding wird dazu der Dialog aufgerufen
und Remote auf den OK-Button geklickt. Nicht sehr schön. Gibt es irgendein API?

ps: ich möchte nicht nur einzelne Controls stylen (UxThemes.pas) sondern die Shell/Desktop.
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung.
  Mit Zitat antworten Zitat