C# WinForm实现任务栏程序图标闪烁

相信大家在用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 = 2;
public const UInt32 FLASHW_TIMERNOFG = 12;
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 = 3;// UInt32.MaxValue;
    fInfo.dwTimeout = 500;
    FlashWindowEx(ref fInfo);
}

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

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

时间: 2024-10-12 22:44:53

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

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

Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁可是不能切换 1. 可能你的Alt+Tab键被别人禁用了,试下以下的方法: 1 2. 为什么要禁用Alt+Tab 1 3. ALT+TAB的历史作用 2 4. 解决方式::AltTabTuner1.0.1绿色版(系统设置软件 2 5. 參考 3 1. 可能你的Alt+Tab键被别人禁用了,试下以下的方法: 開始-执行-输入regedit,找到HKEY_CURRENT_USER\Control Panel\Desktop,在右边窗体,双

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

Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁但是不能切换 1. 可能你的Alt+Tab键被别人禁用了,试下下面的方法: 1 2. 为什么要禁用Alt+Tab 1 3. ALT+TAB的历史作用 2 4. 解决方案::AltTabTuner1.0.1绿色版(系统设置软件 2 5. 参考 3 1. 可能你的Alt+Tab键被别人禁用了,试下下面的方法: 开始-运行-输入regedit,找到HKEY_CURRENT_USER\Control Panel\Desktop,在右边窗口,双

WPF 任务栏图标闪烁提醒

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Runtime.InteropServices; 5 using System.Text; 6 using System.Windows; 7 using System.Windows.Interop; 8 9 10 public static class FlashWindow 11 { 12 [DllImport("u

电脑任务栏闪烁以及任务栏图标闪烁解决办法

前言:近来笔者发现电脑不时的电脑桌面和菜单栏会不停的闪烁,只能通过Ctrl + shift + ESC打开任务管理器来重启资源管理器,但是发现重启之后的一会儿好了,但是过一会儿又闪烁,后来琢磨好久,才发现是有软件在更改默认软件,造成资源管理器不断重启,所以桌面图标才不断闪烁,恢复系统默认软件后就好了,下面将方法分享给大家 一,按win键就是键盘左下角Ctrl键右边的一个,然后选择设置按钮,如下如所示 二.打开如下界面,我们选择应用这个选项,如下图所示 三.选择之后选择默认应用 四.选择之后在右边

WPF 系统托盘 图标闪烁

WPF消息通知 系统托盘,图标闪烁 1 using System.Windows.Forms; 2 3 using System.Windows.Threading; 4 5 public partial class Window : Window 6 { 7 private NotifyIcon notifyIcon; 8 DispatcherTimer icoTimer = new DispatcherTimer(); 9 string icoUrl = @"../../Red.ico&qu

基于C# Winform的简易聊天程序[第一篇-两端通信]

程序简介 本聊天程序支持局域网内部客户端与服务端之间的互相通信. 原理 启动服务端后,服务端通过持续监听客户端发来的请求,一旦监听到客户端传来的信息后,两端便可以互发信息了.服务端需要绑定一个IP,用于客户端在网络中寻找并建立连接.信息发送原理:将手动输入字符串信息转换成机器可以识别的字节数组,然后调用套接字的Send()方法将字节数组发送出去.信息接收原理:调用套接字的Receive()方法,获取对端传来的字节数组,然后将其转换成人可以读懂的字符串信息. 界面设计 - 服务端 IP文本框 na

iPad和iPhone上的应用程序图标

问:如何在iPad和iPhone使用我的应用程序包中的图标文件? 答:下面是处理文件的图标为iPhone专用的应用程序,iPad的专用应用程序,以及通用的应用程序的指导方针. 如果你不为所列出的可选的图标之一提供的艺术品,系统将自动扩展现有的图标图像中的一个合适的尺寸.强烈建议您的应用程序包括列出的所有图标的艺术品,在所需的特定大小. 在此之前的iOS 3.2,要求图标图像遵循严格的命名约定.这些传统名称表中还列举如下一起为更近的例子图标名称.除了??iTunesArtwork,包括在您的应用程

偶遇问题 - - 程序图标显示异常,程序可以正常使用

解决办法如上图,亲测有效.只是还是折腾了一下才弄好. 具体步骤: 1.任务栏右键,启动任务管理器. 在这里面找到explorer.exe进程将其结束后,千万别把任务管理器关掉!另:做好桌面消失的心理准备. 2.在任务管理器里点“文件”>“新建任务(运行...)”. 在“运行”框里输入cmd,点“确定”或回车. 在小黑框里逐步输入下面三行文字,粘贴复制就好, 只要你在关掉explorer进程之前没把浏览器窗口关掉或隐藏,是可以再回来复制代码的. CD /d %userprofile%\AppDat

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

http://blog.sina.com.cn/s/blog_4cd8dd1301014hfz.html 先说说应用程序图标,一般有下面几种: Icon.png(57x57) - Homescreen icon on iPhone/iPod touch [email protected](114x114) - Homescreen icon on iPhone 4 Icon-72(72x72) - Homescreen icon on iPad Icon-Small.png(29x29) - I