Entwickler-Ecke
Windows API - Aktives Fenster erkennen!
FrankBurian - Fr 17.02.06 15:21
Titel: Aktives Fenster erkennen!
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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!