|
Ci sono situazioni in cui abbiamo la necessità di notificare all'utente che la nostra applicazione in background ha subito dei cambiamenti. Una possibilità interessante è quella di far lampeggiare la nostra applicazione nella TaskBar di Windows attirando così l'attenzione dell'utente, per raggiungere questo obbiettivo basta utilizzare le Api di Windows via P/Invoke, dato che putroppo il Framework.Net non ci dà nessun supporto. La funzione da usare è FlashWindowEx esportata da User32.dll, la cui dichiarazione in C# è: [DllImport( "user32.dll" )] static extern bool FlashWindowEx ( [MarshalAs( UnmanagedType.Struct )] ref FLASHWINFO pfwi ); La struttura FLASHWINFO è invece dichiarata così: [StructLayout( LayoutKind.Sequential )] struct FLASHWINFO { [MarshalAs( UnmanagedType.U4 )] public int cbSize; public IntPtr hwnd; [MarshalAs( UnmanagedType.U4 )] public int dwFlags; [MarshalAs( UnmanagedType.U4 )] public int uCount; [MarshalAs( UnmanagedType.U4 )] public int dwTimeout; } Quindi si capisce subito che per far "lampeggiare" la nostra applicazione sarà suifficiente un semplice codice come il seguente: const int FLASHW_STOP = 0; const int FLASHW_CAPTION = 0x00000001; const int FLASHW_TRAY = 0x00000002; const int FLASHW_ALL = ( FLASHW_CAPTION | FLASHW_TRAY ); const int FLASHW_TIMER = 0x00000004; const int FLASHW_TIMERNOFG = 0x0000000C; FLASHWINFO fi = new FLASHWINFO(); fi.cbSize = Marshal.SizeOf( typeof( FLASHWINFO ) ); // L'handle della finestra di cui eseguire il "flashing" fi.hwnd = myWindowHandle; //Come eseguire il flashing fi.dwFlags = FLASHW_TRAY; //Per quante volte fi.uCount = 100; /* Se non si imposta il timeout (che in realtà corrisponde al Blink rate) viene preso quello di default. Il valore è espresso in millisecondi, il default è 0, quindi usa quello dell'OS */ fi.dwTimeout = 0; //Eseguiamo FlashWindowEx( ref fi ); Per fermare il "flashing" è sufficiente richiamare lo stesso codice passando FLASHW_STOP al posto di FLASHW_TRAY.
|