Habe auch nicht viel Ahnung davon, will es aber, nachdem Deine Anfrage 2 Jahre unbeantwortet blieb, wenigstens versuchen.
Das Problem ist, daß Dein Programm auf Systemereignisse (konkreter: deren windows-weites "Herausposaunen" mittels sog. Botschaften) warten muß (ganz im Gegensatz dazu, wenn Du mit einem Timer periodisch aktiv in das Windows-Geschehen per Nachfrage eingreifst, dann fehlt Dir natürlich die entscheidenden Information, wann die Aktion wirklich nötig ist und ausgelöst werden muß). Dazu bedient man sich sog. Hooks. Systemereignisse wie das In-Den-Vordergrund-Holen des ab dann jeweils aktiven Fensters (und mithin das Deaktivieren des bis dato aktiven Fensters) lösen Botschaften aus, die windows-weit gesendet werden und mithin belauscht werden können. Du müßtest auf die Botschaftstyp(en) (in abnehmender Anzahl ihres Aufrufes bei Fensterwechseln):
- WM_ACTIVATEAPP
- WM_ACTIVATE und/oder
- WM_NCACTIVATE
mit Hilfe eines Hooks (oder, bei verschiedenen Botschaftstypen, auf Hooks?) warten, diese abfangen und dann entsprechend reagieren (zuvor natürlich noch das jeweils gültig Fenster-Handle ermitteln?!).
Ich stehe vor der gleichen Herausforderung wie Du, aber mehr konnte ich bisher auch noch nicht herausfinden.
Vielleicht wissen die Fachleute hier mehr und ergänzen und/oder korrigieren mich gegebenenfalls.
Daß ein Programm mit Timer im Verlaufe der Zeit immer mehr Speicher benötigt, habe ich aufgrund Deines Beitrages erstmalig erfahren, überprüft und kann es leider nur bestätigen. Der Grund dafür ist mir unbekannt, und es ist mir auch unerklärlich.
Grüße vom
Delphi-Laien