C# - Aktív alkalmazás váltásának figyelése programból

forráskód letöltése
A példánkban most annak járunk utána, hogy miként tudjuk figyelni azt az eseményt, amikor a felhasználó egyik alkalmazásról átvált egy másikra. Példaprogramunk folyamatosan jelzi, hogy melyik alkalmazás aktív aktuálisan.
A megvalósításhoz két Windows függvényt kell használnunk: az egyik segítségével lekérdezhetjük annak az ablaknak az azonosítóját, mely éppen aktív, majd a másikkal ennek az azonosítónak a segítségével meghatározhatjuk az adott ablak fejlécének szövegét.
Az aktív ablak azonosítóját a GetForegroundWindow függvény adja vissza.
    [DllImport("user32.dll")] 
    public static extern int GetForegroundWindow(); 
Egy adott ablaknak a fejléc szövegét a GetWindowText függvény adja vissza. Itt első paraméterként az ablak azonosítóját kell megadni, majd ezt követően egy buffer területet, ahová az ablak fejléc szövegének sztringje másolásra kerül. Harmadik paraméterben a buffer méretét kell megadni.
    [DllImport("user32.dll")] 
    public static extern int GetWindowText(int hWnd, StringBuilder text, int count);
Ezek után már egyszerű a dolgunk: egy Timer komponens segítségével rendszeresen lekérdezzük, hogy melyik az aktív ablak és megjelenítjük a fejlécének szövegét. Ha átváltunk egy másik programra, akkor a következő Timer Elapsed eseménynél már értesül erről a tényről alkalmazásunk is.
    private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
      StringBuilder sb = new StringBuilder(256);
      Win32.GetWindowText(Win32.GetForegroundWindow(), sb, 256);
      label1.Text = sb.ToString();
    }