Atom Feed RSS Feed

Il mio profilo

My Photo
Name: Luigi Melisi
Location: Moiano
Italia

Blog Importato : http://www.luigimelisi.com

About

Luigi Melisi รจ un analista programmatore senior, esperto in analisi, progettazione e sviluppo applicazioni web e desktop in ambiente Microsoft(dot.net, c#, asp.net,silverlight,sql server, framework 2.0 e 3.5). Attualmente lavora per la Youbuy e l'AtZone, aziende che operano nel settore dell' E-Commerce. In passato ha lavorato per il Consorzio Infotel, che opera nel settore della sicurezza sul lavoro.

Web Site

YouBuy
AtZone
linkedin
Development Blog
Facebook
Development Blog RSS

Archivio

RICERCA

Ultimi Commenti

Conta visite

Notificare un cambiamento di stato di un' applicazione eseguita in background

postato da meliski76 [04/08/2009 14:39]

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.