Demo程序:
實現任務欄窗體和圖標的閃動:
整個程序是基於Windows Forms的,對於任務欄右下角狀態圖標的閃動,創建了一個類型:NotifyIconAnimator,基本上是包裝了Windows Forms中的NotifyIcon類型,然后內部有個Timer,不斷循環設置NotifyIcon的Icon屬性從而實現圖標的閃爍。使用起來很簡單,開始動畫方法:
//開始閃爍,icons是圖標列表,interval是Timer間隔,loopCount是閃爍次數,-1代表永遠循環 publicvoid StartAnimation(Icon[] icons, int interval, int loopCount)
停止動畫方法是StopAnimation,直接調用就好。
NotifyIconAnimator的構造函數需要NotifyIcon對象,同時在StartAnimation調用后,當前NotifyIcon的圖標會被緩存,當StopAnimation被調用后,緩存的圖標會重新還原到NotifyIcon對象上。
對於窗口的閃爍,當然是直接調用FlashWindowEx Win32 API,這個函數在Windows XP中才有(Windows 2000可以忽略了吧)。具體API封裝可以直接參考pinvoke.net,里面也有直接對Form類型的支持。
還有一點,當當前窗口是活動窗口后調用FlashWindowEx的話,窗口標題欄會閃爍的,如果不希望這樣,即只有在當前窗口是非活動窗口才要進行閃爍的話,需要額外調用GetForegroundWindow API,通過對比程序窗口和桌面活動窗口的Handle,如果不一樣,說明程序窗口不是當前活動窗口,然后再調用FlashWindowEx即可,如下參考代碼:
//窗體中3秒后非活動閃爍窗口的按鈕點擊事件執行 //NativeMethods類型是Win32 API的封裝類型,請參考源代碼或者pinvoke.net privateasyncvoid button4_Click(object sender, EventArgs e) { //等3秒 awaitTask.Delay(3000); //判斷Form的Handle是否是當前活動窗口的Handle if (this.Handle !=NativeMethods.GetForegroundWindow()) //如果是的話,執行FlashWindowEx NativeMethods.FlashWindowEx(this); }


