C# 调用SendMessage刷新任务栏图标(强制结束时图标未消失)
本文参考C++改写 https://blog.csdn.net/dpsying/article/details/20139651 (该文章的坐标理解的有误解,会导致功能无效)
SendMessage的移动鼠标里的坐标 是基于句柄内的 坐标,并不是屏幕坐标,任务栏宽度300 高度固定40,那么就应该从宽度0-300 坐标15之间 移动过去。
首先声明需要用到的 winapi 函数

[DllImport("user32.dll", EntryPoint = "FindWindow")]
private static extern int FindWindow(string lpszClass, string lpszWindow);
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
private static extern int FindWindowEx(int hwndParent, int hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll", EntryPoint = "GetWindowRect")]
private static extern int GetWindowRect(int hwnd, ref System.Drawing.Rectangle lpRect);
[DllImport("user32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
private static readonly int WM_MOUSEMOVE = ;
winapi
封装调用的流程方法

/// <summary>
/// 刷新任务栏图标
/// </summary>
public static void RefreshTaskbarIcon()
{
//任务栏窗口
int one = FindWindow("Shell_TrayWnd", null);
//任务栏右边托盘图标+时间区
int two = FindWindowEx(one, , "TrayNotifyWnd", null);
//不同系统可能有可能没有这层
int three = FindWindowEx(two, , "SysPager", null);
//托盘图标窗口
int foor;
if (three > )
{
foor = FindWindowEx(three, , "ToolbarWindow32", null);
}
else
{
foor = FindWindowEx(two, , "ToolbarWindow32", null);
}
if (foor > )
{
System.Drawing.Rectangle r = new System.Drawing.Rectangle();
GetWindowRect(foor, ref r);
//从任务栏左上角从左到右 MOUSEMOVE一遍,所有图标状态会被更新
for (int x = ; x < (r.Right - r.Left) - r.X; x++)
{
SendMessage(foor, WM_MOUSEMOVE, , ( << ) | x);
}
}
}
方法
C# 调用SendMessage刷新任务栏图标(强制结束时图标未消失)的更多相关文章
- Duilib 修改程序exe、在任务栏以及任务管理器上的图标
参考:https://blog.csdn.net/Rongbo_J/article/details/47379997 https://www.cnblogs.com/happinessda ...
- Swift - 修改导航栏“返回”按钮文字和图标 /手势冲突解决/响应范围
iOS11之前 修改导航栏“返回”按钮文字,图标 https://blog.csdn.net/u012701023/article/details/50264265 iOS11 完美解决导航栏按钮偏移 ...
- iOS7 下使用SVPullToRefresh 下拉刷新导航栏位置错误
iOS7 下使用SVPullToRefresh 下拉刷新导航栏位置错误: 下拉刷新之后,tableview的第一列会跑到导航栏的下面: 修正:添加如下代码 /** * 下拉刷新 增加一个: */ // ...
- Ubuntu下pycharm设定任务栏图标后打开出现问号图标
事情是这样的: ubuntu16.04,安装好pycharm后,bin下只有一个sh执行文件,想要弄成任务栏图标,所以在/usr/share/applications下新建文件pycharm.desk ...
- 关于调用notifyDataSetChanged刷新PullToRefreshListView列表无反应解决办法
文章转载自:关于调用notifyDataSetChanged刷新PullToRefreshListView列表无反应解决办法 | TeachCourse
- Swift - 修改导航栏“返回”按钮文字,图标
Swift - 修改导航栏“返回”按钮文字,图标 2015-11-27 09:13发布:hangge浏览:4037 项目中常常会使用 UINavigationController 对各个页面进行导 ...
- 在隐藏导航栏的控制器中,调用UIIMagePickerController,出现导航栏变透明的问题
在隐藏导航栏的控制器中,调用UIIMagePickerController,出现导航栏变透明的问题 解决办法 #pragma mark - UIImagePickerController Delega ...
- WIN7如何在任务栏建立我的电脑的快捷图标
1. 在桌面空白处鼠标右击->新建->快捷方式,在弹出的对话框中输入 %SystemRoot%\explorer.exe /E,::{20D04FE0-3AEA-1069-A2D8-08 ...
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...
随机推荐
- Java自学-图形界面 容器
Swing 的容器 JFrame和JDialog java的图形界面中,容器是用来存放 按钮,输入框等组件的. 窗体型容器有两个,一个是JFrame,一个是JDialog 步骤 1 : JFrame ...
- OGG复制进程延迟高,优化方法一(使用索引)
日常运维过程中,可能发现OGG同步进程延迟很高: 本篇介绍其中的一种方式. OGG复制进程,或者说同步进程及通过解析ogg trail文件,输出dml语句,在目标库执行dml操作,那么延迟高可能性其一 ...
- Java 方法的重载及引用数据类型(类)
方法的重载 我们假设要在程序中实现一个对数字求和的方法,由于参与求和数字的个数和类型都不确定,因此要针对不同的情况去设计不同的方法. Java允许在一个类中定义多个名称相同的方法,但是参数的类型或个数 ...
- C#设计模式之22-模板方法模式
模板方法模式(Template Method Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/429 访 ...
- C#LeetCode刷题之#206-反转链表(Reverse Linked List)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3828 访问. 反转一个单链表. 输入: 1->2-> ...
- 338. Counting Bits题目详解
题目详情 Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate ...
- 当Notification和Websocket遇到https、http
@ 目录 一.http转为https请求 (1)生成证书1(crt证书转tomcat使用的jks) (2)配置证书1 (3)生成证书2 (4)配置证书2 二.Websocket改为https连接 后言 ...
- centos 安装ifconfig
本文通过最简单方式yum
- vue+leaflet
1.index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- You are using pip version 10.0.1, however version 20.2.2 is available.
在安装第三方库时,出现如下提示: You are using pip version 10.0.1, however version 20.2.2 is available.You should co ...