Ich gehe mal davon aus, dass die RegisterWindowMessage die Explorer Nachricht ID ermittelt. Diese Nachricht wird vom Explorer per Broadcast an alle Top Level Fenster verschickt um ihnen zu signalisieren, dass die Taskbar zur Verfügung steht und Registrierungen von Icons in der
TNA vorgenommen werden können. Wenn der Explorer abstürzt und neu gestartet wird, dann wird diese Nachricht von ihm verschickt und dein Programm kann darauf reagieren und das Icon neu registrieren.
Die WndProc oder die direkten MessageHandler sind soweit nicht gross unterschiedlich. Ein MessageHandler kann immer nur eine Message behandeln und das auch nur, wenn zum Erstellunsgzeitpunkt die ID der Nachricht bekannt ist. Die oben genannte Nachrichten ID wird durch RegisterWindowMessage() ermittelt und ist somit nicht bekannt zur Erstellungszeit und kann somit nicht mit einer solchen Methode behandelt werden. Da ist dann die WndProc die einzige Wahl zwischen den beiden Möglichkeiten. Auch wenn man z.B. mehrere Nachrichten abfangen will und alles themenverwandt ist, würde ich
persönlich das überschreiben der WndProc bevorzugen, da es sonst unnötig aufgebläht wird.
Nachteil von WndProc: Man muss den Typ TMessage auf bestimmte Nachrichtenstrukturen erst noch typecasten, bei den einzelnen MessageHandlern kann man schon einen speziellen Typ angeben. Dafür kann man afaik in der WndProc die weitere Behandlung der Nachricht unterbinden (in der Klassenhiarchie) durch weglassen des inherited Aufrufes. Bei den MessageHandlern geschieht dies afaik immer.