效果相似QQ收到新的會話消息任務欄顏色變化html
附2小段代碼:函數
[System.Runtime.InteropServices.DllImport(
"user32.dll"
)]
static
extern
int
FlashWindow (
int
hwnd,
int
bInvert);
private
void
button1_Click(
object
sender, System.EventArgs e)
{
FlashWindow(
this
.Handle.ToInt32(),1);
// 參數爲1時啓動閃爍, 參數爲0時中止閃爍
}
[System.Runtime.InteropServices.DllImport(
"user32.dll"
)]
public
static
extern
bool
FlashWindow(
IntPtr hWnd,
// handle to window
bool
bInvert
// flash status
);
private
void
button1_Click(
object
sender, EventArgs e)
{
FlashWindow(
this
.Handle,
true
);
}
當後臺應用程序完成工做,能夠經過閃動窗體來通知用戶.this
1.利用窗體的Activate方法url
this.Activate();spa
此方法會直接將目標窗體顯示在當前工做窗體的前面.而且當目標窗體被最小化時,使用此方法基本無效..net
2.利用Windows API-FlashWindowExcode
查了MSDN發現與Flash Window相關的API有兩個:orm
一個FlashWindow,函數原型爲:htm
BOOL WINAPI FlashWindow( __in HWND hWnd, __in BOOL bInvert);blog
此API只閃動窗體一次,顯然不是咱們想要的結果.
另一個是FlashWindowEx,函數原型爲:
BOOL WINAPI FlashWindowEx( __in PFLASHWINFO pfwi);
參數PFLASHWINFO 聲明爲:
typedef struct {
UINT cbSize;
HWND hwnd;
DWORD dwFlags;
UINT uCount;
DWORD dwTimeout;
} FLASHWINFO, *PFLASHWINFO;
字段說明:
cbSize結構體FLASHWINFO的大小.
hwnd要閃動的窗體的句柄.窗體能夠是打開的也能夠是最小化的.
dwFlags
閃動的狀態/標誌. 此參數能夠是如下的值或值的組合(用或操做符"|"組合).
值
含義
FLASHW_ALL
0x00000003
閃動窗體標題和任務欄按鈕,等於將此參數設置爲:
FLASHW_CAPTION | FLASHW_TRAY.
FLASHW_CAPTION
0x00000001
閃動窗體的標題.
FLASHW_STOP
0
中止閃動.系統將窗體恢復到初始狀態.
FLASHW_TIMER
0x00000004
連續不停的閃動,直到此參數被設置爲:FLASHW_STOP
FLASHW_TIMERNOFG
0x0000000C
連續不停的閃動,直到窗體用戶被激活.一般用法將參數設置爲: FLASHW_ALL | FLASHW_TIMERNOFG
FLASHW_TRAY
0x00000002
閃動任務欄按鈕
uCount閃動的次數.
dwTimeout閃動頻率,單位毫秒. 若是dwTimeout值爲0, 函數使用光標的閃動頻率.
在C#中引用此API:
1.由於FlashWindowEx的參數是一個FLASHWINFO結構體類型,因此首先按FLASHWINFO格式聲明一個結構體:
public struct FLASHWINFO
{
public UInt32 cbSize;
public IntPtr hwnd;
public UInt32 dwFlags;
public UInt32 uCount;
public UInt32 dwTimeout;
}
2. 導入API原型:
[DllImport("user32.dll")]
static extern bool FlashWindowEx(ref FLASHWINFO pwfi);
3.應用API:
private void button1_Click(object sender, EventArgs e)
{
//此處按API中參數dwFlags的取值範圍聲明常量,方便在使用API時調用,實際應用時能夠考慮放到一個專門的文件中
public const UInt32 FLASHW_STOP = 0;
public const UInt32 FLASHW_CAPTION = 1;
public const UInt32 FLASHW_TRAY = 2;
public const UInt32 FLASHW_ALL = 3;
public const UInt32 FLASHW_TIMER = 4;
public const UInt32 FLASHW_TIMERNOFG = 12;
this.WindowState = FormWindowState.Minimized;
//準備參數
FLASHWINFO fInfo = new FLASHWINFO();
fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = this.Handle;
fInfo.dwFlags = FLASHW_ALL | FLASHW_TIMERNOFG;//這裏是閃動窗標題和任務欄按鈕,直到用戶激活窗體
fInfo.uCount = UInt32.MaxValue;
fInfo.dwTimeout = 0;
//調用API
FlashWindowEx(ref fInfo);
}
至此,閃動窗體通知用戶的功能實現.
完整代碼爲:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace FlashWindowEX
{
public struct FLASHWINFO
{
public UInt32 cbSize;
public IntPtr hwnd;
public UInt32 dwFlags;
public UInt32 uCount;
public UInt32 dwTimeout;
}
public partial class Form1 : Form
{
public const UInt32 FLASHW_STOP = 0;
public const UInt32 FLASHW_CAPTION = 1;
public const UInt32 FLASHW_TRAY = 2;
public const UInt32 FLASHW_ALL = 3;
public const UInt32 FLASHW_TIMER = 4;
public const UInt32 FLASHW_TIMERNOFG = 12;
public Form1()
{
InitializeComponent();
}
[DllImport("user32.dll")]
static extern bool FlashWindowEx(ref FLASHWINFO pwfi);
[DllImport("user32.dll")]
static extern bool FlashWindow(IntPtr handle, bool invert);
private void button1_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
FLASHWINFO fInfo = new FLASHWINFO();
fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = this.Handle;
fInfo.dwFlags = FLASHW_TRAY | FLASHW_TIMERNOFG;//這裏是閃動窗標題和任務欄按鈕,直到用戶激活窗體
fInfo.uCount = UInt32.MaxValue;
fInfo.dwTimeout = 0;
FlashWindowEx(ref fInfo);
}
}
}