Wie wäre es mit einem Versuch über die Registry und dann einer Broadcast-Message mit WM_STYLECHANGED?
Es gibt wohl keinen einzelnen Registry-Eintrag für das aktuelle Theme. Stattdessen müsste ich alle Teile aus der .theme-Datei einzeln anwenden oder in die Registry schreiben, was sowohl unsauber und aufwändig ist als auch viele Fehlerquellen mit sich bringt.
Wenn du den Dialog nicht sehen willst solltest du SW_HIDE anstelle SW_SHOWNORMAL verwenden oder?
Das hat
imho keine Auswirkung auf das Starten des ControlPanels. Die Ursache für das
Handle-Problem und die Ursache dafür, dass das Theme-ControlPanel keine .exe-Datei ist sondern eine .cpl-Datei. Diese wird durch einen Hilfsaufruf von (vermutlich) rundll32.exe aufgerufen. Davon kommt auch das
Handle und diese exe erhält auch die SW_-Tags.
Soweit ich weiß, wäre das hier der vollständige Aufruf:
Code:
C:\Windows\system32\rundll32.exe C:\Windows\system32\shell32.dll,Control_RunDLL C:\Windows\system32\desk.cpl desk,@Themes /Action:OpenTheme /file:"C:\Windows\Resources\Themes\nature.theme"
Also entweder man kann irgendwie das (Child?-)
Handle vom durch die exe aufgerufenen Fenster erhalten oder dann doch so wie Lucky als Alternative schrieb:
Man könnte auch alle Fenster enummerieren und gucken zu welchen Prozess sie gehören und wenn man das richtige gefunden hat WM_CLOSE an das Fenster senden.
Allerdings frage ich mich, ob man das zuverlässig zuordnen könnte. Was soll denn da als Prozess drin stehen? Ist das dann wirklich eindeutig?