C# 高亮任務(wù)欄圖標的方法,非系統(tǒng)托盤的圖標閃爍效果
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
#region 高亮任務(wù)欄圖標 /// <summary> /// 包含系統(tǒng)應(yīng)在指定時間內(nèi)閃爍窗口次數(shù)和閃爍狀態(tài)的信息 /// </summary> public struct FLASHWINFO { /// <summary> /// 結(jié)構(gòu)大小 /// </summary> public uint cbSize; /// <summary> /// 要閃爍或停止的窗口句柄 /// </summary> public IntPtr hwnd; /// <summary> /// 閃爍的類型 /// </summary> public uint dwFlags; /// <summary> /// 閃爍窗口的次數(shù) /// </summary> public uint uCount; /// <summary> /// 窗口閃爍的頻度,毫秒為單位;若該值為0,則為默認圖標的閃爍頻度 /// </summary> public uint dwTimeout; } public enum falshType : uint { FLASHW_STOP = 0, //停止閃爍 FALSHW_CAPTION = 1, //只閃爍標題 FLASHW_TRAY = 2, //只閃爍任務(wù)欄 FLASHW_ALL = 3, //標題和任務(wù)欄同時閃爍 FLASHW_PARAM1 = 4, FLASHW_PARAM2 = 12, FLASHW_TIMER = FLASHW_TRAY | FLASHW_PARAM1, //無條件閃爍任務(wù)欄直到發(fā)送停止標志或者窗口被激活,如果未激活,停止時高亮 FLASHW_TIMERNOFG = FLASHW_TRAY | FLASHW_PARAM2 //未激活時閃爍任務(wù)欄直到發(fā)送停止標志或者窗體被激活,停止后高亮 } [DllImport("user32.dll")] public static extern bool FlashWindowEx(ref FLASHWINFO pwfi); 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;//閃爍窗口的次數(shù) fInfo.dwTimeout = 0; //窗口閃爍的頻度,毫秒為單位;若該值為0,則為默認圖標的閃爍頻度 return FlashWindowEx(ref fInfo); } #endregion 下面的調(diào)用:未激活時閃爍任務(wù)欄,直到發(fā)送停止標志或者窗體被激活,停止后高亮激活后正常,這個跟QQ是一樣的,激活窗口是停止高亮的事件: 但是QQ有一個缺點是,在會話窗口處理激活狀態(tài)時不閃動,這樣有時候就沒留意到對方發(fā)過來的消息。所以如果想做成無論是否激活了窗體,只要有新消息的時候任務(wù)欄就閃動,直到用戶輸入了文字才不閃動。這可以用下面這種調(diào)用: flashTaskBar(this.Handle, falshType.FLASHW_TIMER ); 并且當用戶輸入時會觸發(fā)事件,在事件處理函數(shù)中加入以下調(diào)用就可以了: 下面的調(diào)用:停止閃爍,停止后如果未激活窗口,窗口高亮,如果窗口處于激活狀態(tài),停止閃爍,不會高亮 flashTaskBar(this.Handle, falshType.FLASHW_STOP); 另外,尚未找到方法讓激活的窗口一直高亮,看起來激活窗口一定會取消高亮。 該文章在 2021/1/21 11:08:17 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |