標籤:style io 使用 ar div sp 代碼 on c
今天用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 );
再加入一個定時器,讓只閃動3s,並且當使用者輸入時會觸發事件,在事件處理函數中加入以下調用就可以了:
下面的調用:停止閃爍,停止後如果未啟用視窗,視窗高亮
flashTaskBar(this.Handle, falshType.FLASHW_STOP);
C#實現工作列高亮(閃爍3s就停止並一直處於高亮狀態)