Wallpaper fade in/out
-
Hallo zusammen,
ich brauche Unterstützung. Ich habe einen kleinen WallpaperChanger geschrieben und wollte dazu eine Einblendeffekt (fade in/out) nutzen- anlalog dem dem Aero Design-Effekt in Win7. Durch googeln fand ich hierzu folgendes Code-Snippet:
HWND hwnd;
hwnd = FindWindow( (LPCTSTR) "Progman", NULL );
SendMessageTimeout(hwnd, 0x52c, NULL, NULL, 0, 500,NULL);Das funzt auch prima! (auch wenn mir das SendMessageTimeout nicht ganz klar ist)
Allerdings fiel mir auf, dass anschließend weitere Desktopfuntionen systemweit nicht mehr ansprechbar sind: z.B ein/ausblenden der DesktopIcons (ShowWindow(FindWindow("Progman", "Program Manager"), 1)....) etc..Meine Fragen:
1. Was hat es mit dem SendMessageTimeout an "Progman" auf sich?
2. Wie schalte ich diesen Fade in/out Effekt wieder ab?Für Hinweise und Tipps bedanke ich mich schon jetzt.
LG Werner
-
SendMessageTimeout
ist wieSendMessage
, nur eben mit Timeout. D.h. wenn der Thread der die Message bearbeitet sich zu lange Zeit lässt, dann wird derSendMessageTimeout
einfach trotzdem nach dem Timeout beendet.SendMessageTimeout
verwendet man wenn man grundsätzlich möchte dass der Aufruf erst zurückkommt nachdem das Fenster die Nachricht verarbeitet hat, aber im Falle des Falles (=das Fenster bearbeitet die Nachricht nie, z.B. weil sein Thread hängt) sein Programm nicht blockieren will.Was die Nachricht 0x52c genau soll weiss ich nicht. Der Code wird oft mit dem Kommentar "enable ActiveDesktop" gepostet, bzw. der hier:
http://forums.whirlpool.net.au/archive/1802418
schreibt//kill Progman, so Windows launches WorkerW instead to perform the animation
.Bzw. nach ein wenig weiterem gegoogle...
Wenn ich das richtig verstehe heisst das dass Windows ohne aktivem ActiveDesktop ein Fenster der Klasse "Progman" verwendet um den Desktop anzuzeigen, und mit aktivem ActiveDesktop ein Fenster der Klasse "WorkerW".
Und dann ist auch klar, warum weitere Dinge dieFindWindow("Progman", ...)
verwenden nicht mehr funktionieren, sobald man ActiveDesktop aktiviert hat.
-
Danke für diesen Hinweis.
Bleibt für mich aber noch die Frage danach, wie ich diesen Fade-in/out-Effekt wieder rückgängig mache. Hierzu hab ich auch nach intensivem googeln keine Lösung gefunden.
LG Werner