程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#實現任務欄高亮(閃爍3s就停止並一直處於高亮狀態)

C#實現任務欄高亮(閃爍3s就停止並一直處於高亮狀態)

編輯:C#入門知識

C#實現任務欄高亮(閃爍3s就停止並一直處於高亮狀態)




今天用C#做一個類似QQ的通訊軟件,因為有時候收到消息了沒有注意到,所以想在收到消息後實現任務欄一閃一閃,最後為高亮橘黃色,就像QQ發消息時那樣。經過反復搜索和查詢API,發現任務欄閃動並停留需要使用這個函數:
public static extern bool FlashWindowEx(ref FLASHWINFO pwfi);
實現的關鍵代碼如下:

[DllImport("user32.dll")]
public static extern bool FlashWindowEx(ref FLASHWINFO pwfi);

public enum falshType:uint
{
FLASHW_STOP = 0, //停止閃爍
FALSHW_CAPTION = 1, //只閃爍標題
FLASHW_TRAY = 2, //只閃爍任務欄
FLASHW_ALL = 3, //標題和任務欄同時閃爍
FLASHW_PARAM1 = 4,
FLASHW_PARAM2 = 12,
FLASHW_TIMER = FLASHW_TRAY | FLASHW_PARAM1, //無條件閃爍任務欄直到發送停止標志或者窗口被激活,如果未激活,停止時高亮
FLASHW_TIMERNOFG = FLASHW_TRAY | FLASHW_PARAM2 //未激活時閃爍任務欄直到發送停止標志或者窗體被激活,停止後高亮
}

public static bool flashTaskBar(IntPtr hWnd, falshType type)
{
FLASHWINFO fInfo = new FLASHWINFO();
fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = hWnd;//要閃爍的窗口的句柄,該窗口可以是打開的或最小化的
fInfo.dwFlags = (uint)type;//閃爍的類型
fInfo.uCount = UInt32.MaxValue;//閃爍窗口的次數
fInfo.dwTimeout = 0; //窗口閃爍的頻度,毫秒為單位;若該值為0,則為默認圖標的閃爍頻度
return FlashWindowEx(ref fInfo);
}


下面的調用:未激活時閃爍任務欄,直到發送停止標志或者窗體被激活,停止後高亮激活後正常,這個跟QQ是一樣的,激活窗口是停止高亮的事件:
flashTaskBar(this.Handle, falshType.FLASHW_TIMERNOFG);

但是QQ有一個缺點是,在會話窗口處理激活狀態時不閃動,這樣有時候就沒留意到對方發過來的消息。所以如果想做成無論是否激活了窗體,只要有新消息的時候任務欄就閃動,直到用戶輸入了文字才不閃動。這可以用下面這種調用:

flashTaskBar(this.Handle, falshType.FLASHW_TIMER );

並且當用戶輸入時會觸發事件,在事件處理函數中加入以下調用就可以了:

下面的調用:停止閃爍,停止後如果未激活窗口,窗口高亮,如果窗口處於激活狀態,停止閃爍,不會高亮

flashTaskBar(this.Handle, falshType.FLASHW_STOP);

另外,尚未找到方法讓激活的窗口一直高亮,看起來激活窗口一定會取消高亮。



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved