WPF中的图标闪烁功能

代码示例

cs 复制代码
using System.Runtime.InteropServices;
using System.Windows.Interop;
using System.Windows;


namespace AutoFeed.ViewModel
{
    // 用于存储窗口闪烁信息的结构体
    [StructLayout(LayoutKind.Sequential)]
    public struct FLASHWINFO
    {
        public uint cbSize;         // 结构体大小
        public IntPtr hwnd;         // 窗口句柄
        public uint dwFlags;        // 闪烁标志
        public uint uCount;         // 闪烁次数
        public uint dwTimeout;      // 闪烁间隔时间
    }

    public class API
    {
        
         // 同时闪烁窗口标题和任务栏按钮
         public const uint FLASHW_ALL = 3;

         // 持续闪烁直到窗口激活
         public const uint FLASHW_TIMERNOFG = 12;

         // 调用Windows API实现窗口闪烁
         [DllImport("user32.dll")]
         [return: MarshalAs(2)]
         public static extern bool FlashWindowEx(ref FLASHWINFO pwfi);

         // 开始闪烁窗口
         public static void FlashWindow(Window window)
         {
             // 获取窗口句柄
             WindowInteropHelper h = new WindowInteropHelper(window);

             // 初始化闪烁信息
             FLASHWINFO info = new FLASHWINFO
             {
                 hwnd = h.Handle,
                 dwFlags = FLASHW_ALL | FLASHW_TIMERNOFG, // 同时闪烁标题和任务栏,直到窗口激活
                 uCount = uint.MaxValue,  // 无限次数
                 dwTimeout = 0            // 使用默认间隔
             };

             // 设置结构体大小
             info.cbSize = Convert.ToUInt32(Marshal.SizeOf(info));
             // 启动闪烁
             FlashWindowEx(ref info);
        }

         // 停止闪烁窗口
         public static void StopFlashingWindow(Window window)
         {
             WindowInteropHelper h = new WindowInteropHelper(window);

             FLASHWINFO info = new FLASHWINFO
             {
                 hwnd = h.Handle,
                 dwFlags = 0,             // 停止闪烁的标志
                 uCount = uint.MaxValue,
                 dwTimeout = 0
             };

             info.cbSize = Convert.ToUInt32(Marshal.SizeOf(info));
             // 停止闪烁
             FlashWindowEx(ref info);
         }
    }
    
}
相关推荐
码农小韩1 小时前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
匠在江湖2 小时前
裸机单片机任务调度器实现:基于规范分层(COM/APP/SRV/DRV)架构,(附 任务调度器 / 微秒延时函数 / 串口重定向 源码)
单片机·嵌入式硬件·架构
点灯小铭2 小时前
基于单片机的智能洗碗机控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计
清风6666663 小时前
基于单片机的电加热炉智能温度与液位PID控制系统设计
单片机·嵌入式硬件·mongodb·毕业设计·课程设计·期末大作业
一路往蓝-Anbo4 小时前
第五篇:硬件接口的生死劫 —— GPIO 唤醒与测量陷阱
c语言·驱动开发·stm32·单片机·嵌入式硬件
逑之5 小时前
C语言笔记16:文件操作
c语言·笔记·单片机
2401_863326115 小时前
基于单片机智能光控路灯设计
单片机·嵌入式硬件
清风6666666 小时前
基于单片机的球类比赛专用计分与暂停管理系统设计
单片机·嵌入式硬件·毕业设计·课程设计
Y1rong6 小时前
STM32之时钟
stm32·单片机·嵌入式硬件
lalala_Zou6 小时前
场景题:电商平台订单未支付过期如何实现自动关闭订单?
wpf