You ca try to replace implementation/behaviour for default (global) window classes in a dll and to make this dll to be implicitely loaded by all process. See documentation for RegisterClassEx, "System Classes", "Application Global Classes", CS_GLOBALCLASS , "How the System Locates a Window Class" in MSDN PlatformSDK|UserInterface|Windows user interface ....
To make your dll to be loaded by all process in "
Windows NT/2000/XP: To create a class that can be used in every process, create the window class in a .dll and load the .dll in every process. To load the .dll in every process, add its name to the AppInit_DLLs value in following registry key:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows
Whenever a process starts, the system loads the specified .dll in the context of the newly started process before calling its entry-point function. The .dll must register the class during its initialization procedure and must specify the CS_GLOBALCLASS style.
"
But if you need also already running processes to use same dll it may be a little difficult.