当前位置: 首页 > news >正文

C#/WPF 清理任务栏托盘图标缓存

        在我们开发Windows客户端程序时,往往会出现程序退出后,任务还保留之前程序的缓存图标。每打开关闭一次程序,图标会一直增加,导致托盘存放大量缓存图标。为了解决这个问题,我们可以通过下面的程序清理任务栏托盘图标缓存。

清理任务栏托盘缓存图标帮助类:

    public class TaskBarHelper{[DllImport("user32.dll", SetLastError = true)]static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);[DllImport("user32.dll")]static extern bool GetClientRect(IntPtr handle, out RECT rect);[DllImport("user32.dll", CharSet = CharSet.Auto)]static extern IntPtr SendMessage(IntPtr handle, UInt32 message, Int32 wParam, Int32 lParam);struct RECT{public int left, top, right, bottom;}public static void RefreshNotification(){var NotifyAreaHandle = GetNotifyAreaHandle();if (NotifyAreaHandle != IntPtr.Zero){RefreshWindow(NotifyAreaHandle);}var NotifyOverHandle = GetNotifyOverHandle();if (NotifyOverHandle != IntPtr.Zero){RefreshWindow(NotifyOverHandle);}}private static void RefreshWindow(IntPtr windowHandle){const uint WM_MOUSEMOVE = 0x0200;RECT rect;GetClientRect(windowHandle, out rect);for (var x = 0; x < rect.right; x += 5)for (var y = 0; y < rect.bottom; y += 5)SendMessage(windowHandle, WM_MOUSEMOVE, 0, (y << 16) + x);}private static IntPtr GetNotifyAreaHandle(){var TrayWndHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Shell_TrayWnd", null);var TrayNotifyWndHandle = FindWindowEx(TrayWndHandle, IntPtr.Zero, "TrayNotifyWnd", null);var SysPagerHandle = FindWindowEx(TrayNotifyWndHandle, IntPtr.Zero, "SysPager", null);var NotifyAreaHandle = FindWindowEx(SysPagerHandle, IntPtr.Zero, "ToolbarWindow32", null);return NotifyAreaHandle;}private static IntPtr GetNotifyOverHandle(){var OverHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "NotifyIconOverflowWindow", null);var NotifyOverHandle = FindWindowEx(OverHandle, IntPtr.Zero, "ToolbarWindow32", null);return NotifyOverHandle;}}

主程序启动时调用:

        public MainView(){InitializeComponent();TaskBarHelper.RefreshNotification();}

相关文章:

  • Excel 快速填充/输入内容
  • 计算机毕业设计项目基于大数据和ALS算法实现的房源智能推荐系统
  • 洛谷题解 - P2249 【深基13.例1】查找
  • 用crypto库的哈希函数CryptoPP::SHA256实现最简单的区块链20240101
  • 个人博客网站前端页面的实现
  • 鸿蒙实战开发:【分布式软总线组件】
  • 电源ATE自动测试系统为您提供一站式自动化测试解决方案
  • 有趣之matlab-烟花
  • Element-Plus: Select组件实现滚动分页加载
  • Python笔记|字符串的转义
  • 09-设计模式 企业场景 面试题
  • PTA L1-079 天梯赛的善良(C++)
  • MySQL一些命令记录
  • R在直方图上添加一个更平滑的密度曲线
  • PCM和I2S区别
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • CSS3 变换
  • echarts的各种常用效果展示
  • es6要点
  • in typeof instanceof ===这些运算符有什么作用
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 飞驰在Mesos的涡轮引擎上
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 给初学者:JavaScript 中数组操作注意点
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 力扣(LeetCode)22
  • 前端面试总结(at, md)
  • 微信开放平台全网发布【失败】的几点排查方法
  •  一套莫尔斯电报听写、翻译系统
  • 移动端唤起键盘时取消position:fixed定位
  • 如何正确理解,内页权重高于首页?
  • 选择阿里云数据库HBase版十大理由
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # 透过事物看本质的能力怎么培养?
  • #Linux(帮助手册)
  • #QT项目实战(天气预报)
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (三)mysql_MYSQL(三)
  • (转)LINQ之路
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)socket Aio demo
  • ... 是什么 ?... 有什么用处?
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net 发送邮件
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .Net的DataSet直接与SQL2005交互
  • .Net环境下的缓存技术介绍
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [ JavaScript ] JSON方法
  • []T 还是 []*T, 这是一个问题