Autor Beitrag
FrankBurian
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 57



BeitragVerfasst: Fr 17.02.06 15:21 
Hallo,

also meine Programm soll im Hintergrund laufen und immer das gerade aktive Fenster ermitteln!

das geht ja mit GetForegroundWindow.

aber wie kann ich das am sinnvollsten umsetzen, dass er sofort einen fensterwechseln erkennt!

hatte das in einen timer gesteckt, aber nach einer halben stunden, kann man mit dem rechner nicht mehr viel anfangen. speicher voll ausgelastet!

Hatte jemand eine Idee???


Thx, Frank
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Do 14.02.08 22:30 
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