Delphi - Aktív alkalmazás figyelése

forráskód letöltése
Készítsünk most egy olyan komponenst, mely képes arra, hogy szolgáltassa az aktuálisan futó program ablakának fejléc szövegét (Form.Caption) és egy eseményen keresztül értesítse alkalmazásunkat, ha a felhasználó egy másik programra váltott át.
A mellékelt példaprogram megnyitása előtt a WindowWatcher.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Készítünk egy Timer-t a komponensen belül, melyet a konstruktorban hozunk létre és arra használunk fel, hogy folyamatosan ellenőrizzük, hogy változott-e az aktív alkalmazás.
A Timer OnTimer eseményéhez hozzárendeljük saját DoTimer eljárásunkat, mint esemény kezelőt.
constructor TWindowWatcher.Create(AOwner: TComponent);
begin
  inherited;
  FTimer:=TTimer.Create(nil);
  FTimer.Interval:=250;
  FTimer.OnTimer:=DoTimer;
  FTimer.Enabled:=true;
end;
Amikor a DoTimer meghívásra kerül, a GetForegroundWindow függvénnyel lekérdezzük, hogy mi az aktív alkalmazásnak az azonosító száma.
procedure TWindowWatcher.DoTimer(Sender: TObject);
begin
  h:=GetForegroundWindow;
Ha ez a szám nem egyezik a legutóbb lekérdezett számmal, akkor már egy másik programról van szó, ez esetben a felhasználó épp átváltott egy másik alkalmazásra.
  if h<>FLastHandle then begin
    FLastHandle:=h;
Ekkor egy WM_GETTEXT üzenettel lekérdezzük az ablak fejléc szövegét, majd ha lett a komponensünk OnChange eseményéhez eseménykezelő rendelve, akkor meghívjuk azt.
    SendMessage(h, WM_GETTEXT, 512, integer(@buf[0]));
    FLastName:=buf;
    if Assigned(OnChange) then begin
      OnChange(Self);
    end;
  end;
end;
Amikor a felhasználjuk a komponenst és létrejön az OnChange eseménye, akkor a LastName property-n keresztül érhetjük el az aktuálisan aktív program ablakának fejléc szövegét, míg a LastHandle property-ből az alkalmazás ablakának azonosítója olvasható ki.
procedure TForm1.WindowWatcher1Change(Sender: TObject);
begin
  ListBox1.Items.Add(WindowWatcher1.LastName);
end;