<code>

匯入要使用的namespace

using System.Windows.Interop;

using System.Threading;

using System.Runtime.InteropServices;
...
宣告變數
private int _WINDOWHANDLE;
private bool _FLASHINGTASKBAR;
private bool _ISACTIVE;
...
定義winapi使用方法
        [DllImport("user32")]
        public static extern int FlashWindow(int hwnd, int bInvert);
....
判斷目前物件狀況,再利用thread去執行閃爍特效

if (!this.IsActive)

                        {

                            _FLASHINGTASKBAR = true;

                            _ISACTIVE = false;

                            _WINDOWHANDLE = (int)(new WindowInteropHelper(this)).Handle;

                            //Console.WriteLine("_WINDOWHANDLE:"+_WINDOWHANDLE);

                            FlashWindow((int)(new WindowInteropHelper(this)).Handle, 1);

                            //Console.WriteLine("thread start");

                            Thread td = new Thread(new ThreadStart(FlashTaskBar));

                            td.Start();

                        }

...

Thread所執行的方法

private void FlashTaskBar()

        {

            Console.WriteLine("FlashTaskBar");

            Console.WriteLine("_WINDOWHANDLE:" + _WINDOWHANDLE);

                for (int i = 0; i < 60; i++)

                {

                    if (_ISACTIVE)

                    {

                        break;

                    }

                    else

                    {

                        System.Threading.Thread.Sleep(1000);

                        FlashWindow(_WINDOWHANDLE, 1);

                    }

                    

                }

                _FLASHINGTASKBAR = false;            

        }

....

於判斷物件上加上Activated事件去改變_ISACTIVE 的值即可

 private void Window_Activated(object sender, EventArgs e)

       {           

           _ISACTIVE = true;

       }

</code>

狼翔月影 發表在 痞客邦 PIXNET 留言(0) 人氣()