相信大家在用QQ的时候都会知道,你打开了QQ聊天窗口,如果窗口不是当前激活的窗口的话,收到QQ消息时,任务栏(不是托盘图标)上的图标会闪一下变成黄色(Win7默认主题下),用以通知用户有消息进来了,之前我用C#不知道这是怎么做的,用this.Activate()方法就是直接激活窗体,没有达到想要的效果。后来找到了两个API函数,可以实现这个功能。
用到一个Windows的API函数。先来看看这个函数:

BOOL FlashWindow(
HWND hWnd, // handle to window to flash
BOOL bInvert // flash status
);

使用API函数FlashWindow可以闪烁显示指定窗口,让窗口在活动与非活动的状态之间切换,它有两个参数:hwnd和bInvert.其中,参数hwnd为要闪烁的窗口句柄,参数bInvert是一个bool变量,设为true时,程序窗口标题栏从活动切换到非活动状态、或反向切换,当设为false时,窗口标题栏还原为最初的状态。如果配合一个时间组件(Timer组件),以一定的时间间隔执行语句。

在C#中调用很简单:

[DllImport("User32.dll", CharSet = CharSet.Unicode, EntryPoint = "FlashWindow")]
private static extern void FlashWindow(IntPtr hwnd, bool bInvert); //直接调用FlashWindow即可
FlashWindow(this.Handle, true);

这样就可以实现了。这个是比较简单的,还有另外一个函数,可以实现闪烁次数的。

BOOL WINAPI FlashWindowEx(
PFLASHWINFO pfwi //flash status information
);

就是这个。
参数说明:
PFLASHWINFO
定义:

typedef struct {
UINT cbSize; //该结构的字节大小
HWND hwnd; //要闪烁的窗口的句柄,该窗口可以是打开的或最小化的
DWORD dwFlags; //闪烁的状态
UINT uCount; //闪烁窗口的次数
DWORD dwTimeout; //窗口闪烁的频度,毫秒为单位;若该值为0,则为默认图标的闪烁频度
} FLASHWINFO, *PFLASHWINFO;

成员:

dwFlags:
//FLASHW_ALL-------0x00000003 同时闪烁窗口标题和窗口的任务栏按钮,相当于FALSHW_CAPTION | FLASHW_TRAY
//FLASHW_CAPTION---0x00000001 闪烁窗口的标题
//FLASHW_STOP------0 停止闪烁,系统将重置窗口到其初始状态
//FLASHW_TIMER-----0x00000004 不停地闪烁,直到FLASHW_STOP标志被设置
//FLASHW_TIMERNOFG-0x0000000C 不停地闪烁,直到窗口前端显示
//FLASHW_TRAY------0x00000002 闪烁窗口的任务栏按钮

返回值:
返回值表示调用FlashWindowEx函数之前窗口的活动状态,若指定窗口在调用函数之前是激活的,那么返回非零值,否则返回零值。

在C#中调用的例子:

[DllImport("User32.dll", CharSet = CharSet.Unicode, EntryPoint = "FlashWindowEx")]
private static extern void FlashWindowEx(ref FLASHWINFO pwfi);
public struct FLASHWINFO
{
public UInt32 cbSize;//该结构的字节大小
public IntPtr hwnd;//要闪烁的窗口的句柄,该窗口可以是打开的或最小化的
public UInt32 dwFlags;//闪烁的状态
public UInt32 uCount;//闪烁窗口的次数
public UInt32 dwTimeout;//窗口闪烁的频度,毫秒为单位;若该值为0,则为默认图标的闪烁频度
}
public const UInt32 FLASHW_TRAY = ;
public const UInt32 FLASHW_TIMERNOFG = ;
private void FlashWin()
{
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 = ;
FlashWindowEx(ref fInfo);
}

以上例子只要调用FlashWin()可实现闪烁。

转载自:http://www.hejingzong.cn/blog/viewBlog_59.aspx

C# WinForm实现任务栏程序图标闪烁的更多相关文章

  1. WinForm设置任务栏托盘程序

    程序设计界面如下图所示: 1.在程序初始化加载的时候设置程序图标,具体code如下: private void Form1_Load(object sender, EventArgs e) { //t ...

  2. Delphi 在任务栏隐藏程序图标

    Delphi 在任务栏隐藏程序图标 方法一:1.修改工程文件中的“Application.MainFormOnTaskbar := True;”为“Application.MainFormOnTask ...

  3. Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁可是不能切换

    Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁可是不能切换 1. 可能你的Alt+Tab键被别人禁用了,试下以下的方法: 1 2. 为什么要禁用Alt+Tab 1 3. ALT+TAB ...

  4. VC 任务栏图标闪烁

    像QQ来消息时的,图标闪烁效果 将如下代码添加到Timer响应函数中 ) {// 任务栏图标闪烁 if (this != GetForegroundWindow()) { //// this-> ...

  5. Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁但是不能切换

    Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁但是不能切换 1. 可能你的Alt+Tab键被别人禁用了,试下下面的方法: 1 2. 为什么要禁用Alt+Tab 1 3. ALT+TAB ...

  6. 【Qt开发】更改应用程序图标和任务栏图标

    说明 实际开发过程中,生成的应用文件不会用默认的图标,同时程序启动后任务栏的图标也需要修改,还有窗口的图标,这样显得程序不那么low.更改程序的图标有多种方式,基于Qt Creator或vs开发的方式 ...

  7. Qt应用程序图标设置

    Qt应用程序图标设置 本文仅仅适用于windows下,linux等不适用. 下面说的图标,指的是程序文件的图标,而不是托盘图标或者说运行时任务栏的图标(任务栏和程序窗口的图标在windows/linu ...

  8. ios 应用程序图标、启动画面、itune图标设置

    http://blog.sina.com.cn/s/blog_4cd8dd1301014hfz.html 先说说应用程序图标,一般有下面几种: Icon.png(57x57) - Homescreen ...

  9. vs2010如何生成EXE文件如何更改EXE程序图标

    vs2010如何生成EXE文件 F5启动调试后,进入下面路径查找: 我的文档\Visual Studio 2010\Projects\项目名称\项目名称\bin\Debug 如何更改EXE程序图标 其 ...

随机推荐

  1. 【问题】报错[CRITICAL] Rendering SLS 'base:minions.install' failed: Jinja variable 'list' object has no element 0

    1.报错[CRITICAL] Rendering SLS 'base:minions.install' failed: Jinja variable 'list' object has no elem ...

  2. ajax basic 认证

    //需要Base64见:http://www.webtoolkit.info/javascript-base64.html function make_base_auth(user, password ...

  3. JavaStuNote 5

    接口 (interface) 一个抽象类,全部的方法都是抽象的,全部方法的public, 我们把这种类叫做极度抽象类,是最干瘪的类. public abstract class A { public  ...

  4. C++ 获取当前时间

    #include <time.h> #include <stdio.h> int main( void ) {     time_t t = time(0);     char ...

  5. C++ string(转)

    C++中string是标准库中一种容器,相当于保存元素类型为char的vector容器(自己理解),这个类提供了相当丰富的函数来完成对字符串操作,以及与C风格字符串之间转换,下面是对string一些总 ...

  6. 第三章 SqlSessionFactoryBean(MyBatis)

    SqlSessionFactoryBean 在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建.而在 MyBatis-Spring 中 ...

  7. 公式编辑器编辑倒L符号的方法

    数学公式全都是由数字字母和一些符号组成的,一些常用的字母符号我们使用起来也很熟练,但是在数学中也有一些符号是比较少用的,比如倒着的L,这个符号在一些函数中出现过,表示某一类的函数.在word公式编辑器 ...

  8. ChemDraw常用到的几种技巧

    ChemDraw对于化学学习的重要性相当于CAD和建筑学.PS和设计,所以如果你是一名生化相关的工作人员,拥有ChemDraw并掌握ChemDraw的使用方法十分必要!这是一款对于我们研究化学的人来说 ...

  9. ASP.Net MVC开发基础学习笔记(7):数据查询页面

     前言 前面铺垫了那么多,今天我们就用MVC5 + EF6 + Bootstrap3来正式创建一个基本查询页面. 为什么从查询页面開始?嘿嘿.由于小弟的.Net生涯就是从查询页面開始的,记得正式工 ...

  10. 把Excel中的数据转换成Sql语句

    假如excel表格中有A.B.C三列数据,希望导入到数据库users表中,相应的字段各自是name,sex,age ,在你的excel表格中添加一列.利用excel的公式自己主动生成sql语句,方法例 ...