C#闪动任务栏的方法
用FlashWindowEx可以实现窗口的闪烁,结构如下:
/// <summary>
/// 闪烁窗口
/// </summary>
/// <param name="pwfi">窗口闪烁信息结构</param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern bool FlashWindowEx(ref FLASHWINFO pwfi);
/// <summary>
/// 闪烁类型
/// </summary>
public enum flashType : uint
{
FLASHW_STOP = , //停止闪烁
FALSHW_CAPTION = , //只闪烁标题
FLASHW_TRAY = , //只闪烁任务栏
FLASHW_ALL = , //标题和任务栏同时闪烁
FLASHW_PARAM1 = ,
FLASHW_PARAM2 = ,
FLASHW_TIMER = FLASHW_TRAY | FLASHW_PARAM1, //无条件闪烁任务栏直到发送停止标志或者窗口被激活,如果未激活,停止时高亮
FLASHW_TIMERNOFG = FLASHW_TRAY | FLASHW_PARAM2 //未激活时闪烁任务栏直到发送停止标志或者窗体被激活,停止后高亮
}
/// <summary>
/// 包含系统应在指定时间内闪烁窗口次数和闪烁状态的信息
/// </summary>
public struct FLASHWINFO
{
/// <summary>
/// 结构大小
/// </summary>
public uint cbSize;
/// <summary>
/// 要闪烁或停止的窗口句柄
/// </summary>
public IntPtr hwnd;
/// <summary>
/// 闪烁的类型
/// </summary>
public uint dwFlags;
/// <summary>
/// 闪烁窗口的次数
/// </summary>
public uint uCount;
/// <summary>
/// 窗口闪烁的频度,毫秒为单位;若该值为0,则为默认图标的闪烁频度
/// </summary>
public uint dwTimeout;
}
/// <summary>
/// 闪烁窗口
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="type">闪烁类型</param>
/// <returns></returns>
public static bool FlashWindowEx(IntPtr hWnd, flashType type)
{
FLASHWINFO fInfo = new FLASHWINFO();
fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = hWnd;//要闪烁的窗口的句柄,该窗口可以是打开的或最小化的
fInfo.dwFlags = (uint)type;//闪烁的类型
fInfo.uCount = int.MaxValue;//闪烁窗口的次数
fInfo.dwTimeout = ; //窗口闪烁的频度,毫秒为单位;若该值为0,则为默认图标的闪烁频度
return FlashWindowEx(ref fInfo);
}
调用如下:
//第一个闪动判断窗体是否被激活
var isTrue= FlashWindowEx(val.Handle, flashType.FLASHW_TIMERNOFG);
if (isTrue == false)
{
//如果窗口未激活,那么就停止闪烁,高亮
FlashWindowEx(val.Handle, flashType.FLASHW_STOP);
}
如果只是调用这句FlashWindowEx(val.Handle, flashType.FLASHW_TIMERNOFG),也能实现闪动的效果,但是这个有一定的问题。
就是如果当前有2个或者2个以上的窗口都在闪动,当其中任意一个窗口被激活,其它的窗口闪动效果也取消了,所有就需要加入下面一句话:
if (isTrue == false)
{
//如果窗口未激活,那么就停止闪烁,高亮
FlashWindowEx(val.Handle, flashType.FLASHW_STOP);
}
if语句的意思是如果窗体闪动的时候已经被激活了,那么就不用闪动当前任务栏。
但是在wpf中停止闪烁有时会无效,没有起到作用,那么最保险的做法就是如下:
FlashWindowEx(handel, flashType.FLASHW_TIMER);
如果这样,需要修改闪动次数为1次:fInfo.uCount = 1;//闪烁窗口的次数,新的代码如下:
/// <summary>
/// 闪烁窗口
/// </summary>
/// <param name="pwfi">窗口闪烁信息结构</param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern bool FlashWindowEx(ref FLASHWINFO pwfi);
/// <summary>
/// 闪烁类型
/// </summary>
public enum flashType : uint
{
FLASHW_STOP = , //停止闪烁
FALSHW_CAPTION = , //只闪烁标题
FLASHW_TRAY = , //只闪烁任务栏
FLASHW_ALL = , //标题和任务栏同时闪烁
FLASHW_PARAM1 = ,
FLASHW_PARAM2 = ,
FLASHW_TIMER = FLASHW_TRAY | FLASHW_PARAM1, //无条件闪烁任务栏直到发送停止标志或者窗口被激活,如果未激活,停止时高亮
FLASHW_TIMERNOFG = FLASHW_TRAY | FLASHW_PARAM2 //未激活时闪烁任务栏直到发送停止标志或者窗体被激活,停止后高亮
}
/// <summary>
/// 包含系统应在指定时间内闪烁窗口次数和闪烁状态的信息
/// </summary>
public struct FLASHWINFO
{
/// <summary>
/// 结构大小
/// </summary>
public uint cbSize;
/// <summary>
/// 要闪烁或停止的窗口句柄
/// </summary>
public IntPtr hwnd;
/// <summary>
/// 闪烁的类型
/// </summary>
public uint dwFlags;
/// <summary>
/// 闪烁窗口的次数
/// </summary>
public uint uCount;
/// <summary>
/// 窗口闪烁的频度,毫秒为单位;若该值为0,则为默认图标的闪烁频度
/// </summary>
public uint dwTimeout;
}
/// <summary>
/// 闪烁窗口
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="type">闪烁类型</param>
/// <returns></returns>
public static bool FlashWindowEx(IntPtr hWnd, flashType type)
{
FLASHWINFO fInfo = new FLASHWINFO();
fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = hWnd;//要闪烁的窗口的句柄,该窗口可以是打开的或最小化的
fInfo.dwFlags = (uint)type;//闪烁的类型
fInfo.uCount = ;//闪烁窗口的次数
fInfo.dwTimeout = ; //窗口闪烁的频度,毫秒为单位;若该值为0,则为默认图标的闪烁频度
return FlashWindowEx(ref fInfo);
}
//调用代码:
var isTrue= FlashWindowEx(handel, flashType.FLASHW_TIMERNOFG);
if (isTrue == false)
{
//如果窗口未激活,那么就停止闪烁,高亮
FlashWindowEx(handel, flashType.FLASHW_TIMER);
}
C#闪动任务栏的方法的更多相关文章
- Mvc 分页栏扩展方法
using System; using System.Collections.Generic; using System.Reflection; using System.Text; using Sy ...
- Android (争取做到)最全的底部导航栏实现方法
本文(争取做到)Android 最全的底部导航栏实现方法. 现在写了4个主要方法. 还有一些个人感觉不完全切题的方法也会简单介绍一下. 方法一. ViewPager + List<View> ...
- C#设置窗体最大化且不遮挡任务栏的方法
C#设置窗体最大化示例: 也可将方法内的内容放到主窗体首次加载load方法中. /// <summary> /// 设置窗体最大化(不遮挡任务栏)但此方法在宽屏中不能显示全屏/// < ...
- DataTables 表格固定栏使用方法
有时候数据过多,为了用户体验,需要将重要的栏目固定不动,如下图所示: 从上图我们可以看出,表格滚动的时候,左边5栏是不动的.现在说一下实现方法: 插件地址: https://datatables.ne ...
- zblog插件增加后台导航栏的方法
有时我们经常需要对插件进行设置,但是又不能让用户去做这些,那么下面的方法将会给插件增加在后台导航栏显示的功能 首先打开对应插件的文件夹,找到对应插件的 include.php 文件 将下面的代码粘 ...
- <iOS 导航栏>第一节:导航栏透明方法实现代码
说下导航栏的透明方法: 很多应用需要导航栏随着向上滑动,逐渐从透明变成不透明,很炫酷,大部分应用都在使用导航栏渐变效果,现附上代码然后直接将实现,一会讲下如何来实现,这一部分直接上代码. ...
- CSS | 自适应两栏布局方法
html代码: <div class="main"> <div class="left" style="background: #0 ...
- 导航栏协议方法UINavigationControllerDelegate
关于UINavigationControllerDelegate: Delegate中一共有6个方法.其中两个跟控制器ViewController的跳转有关.有两个跟屏幕的旋转有关.有两个跟导航栏动画 ...
- frameset 在 Google Chrome 中无法隐藏左边栏解决方法!
使用Frameset 框架,发现在IE下, <frameset name="mainDefine" cols="200,10,*" frameborder ...
随机推荐
- mysql双机热备+heartbeat集群+自动故障转移
环境说明:本环境由两台mysql 数据库和heartbeat 组成,一台的ip 为 192.168.10.197,一台为192.168.10.198,对外提供服务的vip 为192.168.10.20 ...
- 随机生成指定长度的密码之---Random
随机生成指定长度的密码思路: 1.密码中可能包含字母,数字,特殊符号,为了区别分别定义常量 2.随机生成密码,自然想到要用到java.util.Random 类 3.定义一个带两个参数的方法,1跟2, ...
- ABAP alv report
*&---------------------------------------------------------------------* *& Report YTST_FF_ ...
- keras: 在构建LSTM模型时,使用变长序列的方法
众所周知,LSTM的一大优势就是其能够处理变长序列.而在使用keras搭建模型时,如果直接使用LSTM层作为网络输入的第一层,需要指定输入的大小.如果需要使用变长序列,那么,只需要在LSTM层前加一个 ...
- API的理解和使用——有序集合
有序集合常用的命令 命令 功能 zadd key score member [score member ... ] 添加元素 zcard key 计算成员个数 zscore key member 计算 ...
- API的理解和使用——全局命令
全局命令 命令 功能 set 创建键值对 keys 遍历查看所有键 exists 判断一个键是否存在,1存在,0不存在 dbsize 当前数据库中有多少个键 del 删除一个或多个键 expire 设 ...
- Java基础教程:HashTable与HashMap比较
Java基础教程:HashTable与HashMap比较 1. 关于HashMap的一些说法: a) HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体.HashMap的底层结 ...
- IOS 工程所支持的版本 设置
如何设置 Base SDK 和 iOS Deployment Target ? http://leopard168.blog.163.com/blog/static/16847184420116159 ...
- matlab写txt文件
fd=fopen('C:\Users\Qin\Desktop\1112.txt','w');for i=16:19 for j=1:5 fprintf(fd,'%f,%f\r\n',[cluster( ...
- ffmpeg给视频加文字水印
ffmpeg -i dd2800.mp4 -vf "drawtext=fontfile=Arial.ttf: text='Hu':x=100:y=10:fontsize=24:fontcol ...