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.