Mein Ansatz wäre:
1. Packe die Funktionalität in eine
DLL
2. Erzeuge einen globalen Hook (z.B. WH_MOUSE) mit einer Funktion, die ebenfalls in der
DLL liegt -> deine
DLL wird in jeden Prozess injeziert.
3. Beim Laden der
DLL ermittle alle Hauptfenster des jeweiligen Prozesses und merke sie dir (EnumWindows / GetWindowThreadProcessId).
4. Hooke die Funktionen CreateWindow und CreateWindowEx, um neue Hauptfenster abzufangen (die ohne WS_CHILD).
5. Ein WM_DESTROY in der Fensterprozedur entfernt ein Fenster aus deiner Liste.
Diesen Fenstern musst du dann deine Buttons zuordnen.
Entweder erzeugst du ein kleines Panel mit den Buttons, das du dann zusammen mit dem Fenster verschiebst, oder du arbeitest ohne Fenster und behandelst die Meldungen WM_NCLBUTTONDOWN, WM_NCMOUSEMOVE, WM_NCLBUTTONUP und WM_NCPAINT selbst.