窗体的闪动通知

当后台应用程序完成工作,可以通过闪动窗体来通知用户.

1.利用窗体的Activate方法

      this.Activate();

      此方法会直接将目标窗体显示在当前工作窗体的前面.并且当目标窗体被最小化时,使用此方法基本无效.

2.利用Windows API-FlashWindowEx

      查了MSDN发现与Flash Window相关的API有两个:

      一个FlashWindow,函数原型为:

      BOOL WINAPI FlashWindow(  __in  HWND hWnd,  __in  BOOL bInvert);

      此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);
        }

      至此,闪动窗体通知用户的功能实现.

      完整代码为:  

 

 1  using  System;
 2  using  System.Collections.Generic;
 3  using  System.ComponentModel;
 4  using  System.Data;
 5  using  System.Drawing;
 6  using  System.Linq;
 7  using  System.Text;
 8  using  System.Windows.Forms;
 9  using  System.Runtime.InteropServices;
10 
11  namespace  FlashWindowEX
12  {
13       public   struct  FLASHWINFO
14      {
15           public  UInt32 cbSize;
16           public  IntPtr hwnd;
17           public  UInt32 dwFlags;
18           public  UInt32 uCount;
19           public  UInt32 dwTimeout;
20      } 
21 
22       public   partial   class  Form1 : Form 
23      {
24           public   const  UInt32 FLASHW_STOP  =   0 ;
25           public   const  UInt32 FLASHW_CAPTION  =   1 ;
26           public   const  UInt32 FLASHW_TRAY  =   2 ;
27           public   const  UInt32 FLASHW_ALL  =   3 ;
28           public   const  UInt32 FLASHW_TIMER  =   4 ;
29           public   const  UInt32 FLASHW_TIMERNOFG  =   12
30 
31           public  Form1() 
32          { 
33              InitializeComponent(); 
34          } 
35 
36          [DllImport( " user32.dll " )] 
37           static   extern   bool  FlashWindowEx( ref  FLASHWINFO pwfi);
38 
39          [DllImport( " user32.dll " )]
40           static   extern   bool  FlashWindow(IntPtr handle,  bool  invert); 
41 
42 
43           private   void  button1_Click( object  sender, EventArgs e) 
44          {
45               this .WindowState  =  FormWindowState.Minimized; 
46 
47              FLASHWINFO fInfo  =   new  FLASHWINFO();
48 
49              fInfo.cbSize  =  Convert.ToUInt32(Marshal.SizeOf(fInfo));
50              fInfo.hwnd  =   this .Handle;
51              fInfo.dwFlags  =  FLASHW_TRAY  |  FLASHW_TIMERNOFG;
52              fInfo.uCount  =  UInt32.MaxValue;
53              fInfo.dwTimeout  =   0
54 
55              FlashWindowEx( ref  fInfo);
56          }
57      }
58  }
59 

   

  注:参考<<Windows Forms 2.0程序设计>> 

转载于:https://www.cnblogs.com/wanglj2007/archive/2009/05/20/1468209.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值