C# - Alkalmazás ablakának villogtatása

forráskód letöltése
Háttérben futó Windows-os alkalmazások esetén jól jöhet, ha valamilyen módon figyelmeztetni tudjuk a felhasználót a műveletek befejezésére. Ennek egyik módja, hogy aktívvá tesszük az alkalmazás ablakát. Ha ezt tolakodónak érezzük, akkor jelezhetünk diszkrétebben is, mégpedig az alkalmazás Tálcán megjelenő ikonjának felvillantásával. Cikkünkben megvizsgáljuk, hogyan oldhatjuk meg ez utóbbit.
A mellékelt példa ComboBox kontroljában ki kell választanunk a villogtatás típusát, mely a MŰVELET gombbal indítható. A villogtatás 100 felvillantást jelent, melyet a LEÁLLÍTÁS gombbal szakíthatunk meg.
A művelet elvégzésére a USER32.DLL-ben megtalálható FlashWindowEx metódust használjuk fel, melynek menedzselt deklarációját a Win32 osztályban helyeztük el.
[DllImport("user32.Dll", CharSet=CharSet.Auto)]
public static extern int FlashWindowEx(ref FLASHWINFO f);
A metódus egy FLASHWINFO típusú struktúrát vár paraméterként, melyben meg kell adnunk a megfelelő adatokat. A deklaráció szintén ebben az osztályban kapott helyet.
public struct FLASHWINFO
{
  public uint cbSize;
  public IntPtr hwnd;
  public int dwFlags;
  public int uCount;
  ...
}
A mezők jelentése a következő:
  • A struktúra mérete
  • A villogtatandó ablak azonosítója
  • Villogtatás típusa
  • Villogtatás száma
A típusba egy konstanst kell megadni, mely meghatározza, hogy az adott ablaknak a fejléce, a Tálcán található ikonja, vagy mindkettő villogtatandó.
A műveletet a következőképpen végezzük el: első lépésben a struktúrát példányosítjuk.
Win32.FLASHWINFO f = new Win32.FLASHWINFO();
Megadjuk a méretadatot.
f.cbSize = (uint)Marshal.SizeOf(f);
Megadjuk az ablakazonosítót.
f.hwnd = this.Handle;
A művelet számát.
f.uCount = 100;
Majd a típustól függő konstanst.
switch(comboBox1.SelectedIndex)
{
  case 0: type = Win32.FLASHW_CAPTION;
    break;
  ...
A struktúrát átadva paraméterként meghívjuk a metódust.
Win32.FlashWindowEx(ref f);
A leállításkor a FLASHW_STOP konstanst kell megadnunk a struktúra meghatározott mezőjében, majd újra meg kell hívni a metódust.
f.dwFlags = Win32.FLASHW_STOP;
Win32.FlashWindowEx(ref f);
A többi adat változatlan. A használható konstansok listája a következő:
  • FLASHW_STOP
  • FLASHW_CAPTION
  • FLASHW_TRAY
  • FLASHW_ALL = FLASHW_CAPTION | FLASHW_TRAY