C#语言操作Win7系统任务栏(TaskBar)中程序图标的背景进度条
来源:互联网 发布:外汇行情看盘软件 编辑:程序博客网 时间:2024/06/05 15:00
- 发表于 11个月前
- 阅读 266
- 收藏 1
- 点赞 0
- 评论 0
https://my.oschina.net/Tsybius2014/blog/716122
一、问题描述
在使用火狐浏览器(47.0.1)下载文件时,我注意到我的Win7系统任务栏火狐程序图标的背景部分会变成一个进度条,实时展示下载进度。
于是我想了下怎么用C#语言实现这个功能,也上网查了些资料。后来我发现问题并不像我想的这么简单,因为这个功能并不存在于.NET Framework中,而是被放在一组专门的库中,库的名字叫:Windows API Code Pack for Microsoft .NET Framework
参考文章:Windows API Code Pack for Microsoft .NET Framework
https://blogs.msdn.microsoft.com/windowssdk/2009/06/12/windows-api-code-pack-for-microsoft-net-framework/
二、下载相关库文件
Windows API Code Pack 似乎已经很难被找到,后来我在这个stackoverflow的问题里找到了下载地址:
http://stackoverflow.com/questions/24081665/windows-api-code-pack-where-is-it
这个问题中给出了一组下载地址:
1、https://www.nuget.org/packages/WindowsAPICodePack-Core
2、https://www.nuget.org/packages/WindowsAPICodePack-ExtendedLinguisticServices
3、https://www.nuget.org/packages/WindowsAPICodePack-Sensors
4、https://www.nuget.org/packages/WindowsAPICodePack-Shell
5、https://www.nuget.org/packages/WindowsAPICodePack-ShellExtensions
nuget.org 给出的方法是使用 Package Manager Console 安装库,不过我后来还是决定直接下载dll,用简单粗暴的方法来实现我要做的功能。
Windows API Code Pack 1.1.zip 下载地址在:
https://github.com/jamie-pate/KeepSync/blob/master/contrib/Windows%20API%20Code%20Pack%201.1.zip
三、添加引用
我使用的VS版本为VS2012,.NET Framework版本为4.5。
使用 Visual Studio 建立一个C#窗体应用程序的解决方案。
解决方案建立完毕后需要添加6个引用:
1、Microsoft.WindowsAPICodePack.dll、Microsoft.WindowsAPICodePack.Shell.dll 需要我们从之前下载的 Windows API Code Pack 中引入
2、PresentationCore.dll 如果没有需要我们另行下载,这里给出一个下载地址:
http://www.121down.com/soft/softview-33650.html
3、PresentationFramework、System.Xaml、WindowsBase 都可以直接在添加引用界面的引用列表中选择并添加
这六个引用如下图所示,其中需要下载的用绿色矩形标记,可直接添加引用的用红色矩形标记。
四、绘制界面
界面控件如下图所示:
五、编写代码
编写代码时,需要手动添加命名空间:
1、Microsoft.WindowsAPICodePack.Shell
2、Microsoft.WindowsAPICodePack.Taskbar
通过设置状态、设置进度两个按钮,实现对状态栏中图标进度条的控制:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;//需要添加的命名空间using Microsoft.WindowsAPICodePack.Shell;using Microsoft.WindowsAPICodePack.Taskbar;namespace WindowsAPICodePackTest{ public partial class FormMain : Form { private TaskbarManager windowsTaskbar = TaskbarManager.Instance; public FormMain() { InitializeComponent(); } /// <summary> /// Load函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FormMain_Load(object sender, EventArgs e) { //初始化界面和进度条 cmbProgressStatus.Text = "Normal"; windowsTaskbar.SetProgressState(TaskbarProgressBarState.Normal, this.Handle); windowsTaskbar.SetProgressValue(0, 100, this.Handle); } /// <summary> /// 设置进度条进度 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSetProgress_Click(object sender, EventArgs e) { int progress = 0; int.TryParse(txtProgress.Text, out progress); progress = progress < 0 ? 0 : progress; progress = progress > 100 ? 100 : progress; //设置进度条进度 windowsTaskbar.SetProgressValue(progress, 100, this.Handle); } /// <summary> /// 设置进度条状态 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSetProgressStatus_Click(object sender, EventArgs e) { TaskbarProgressBarState progressState = TaskbarProgressBarState.Normal; switch (cmbProgressStatus.Text) { case "NoProgress": { progressState = TaskbarProgressBarState.NoProgress; } break; case "Indeterminate": { progressState = TaskbarProgressBarState.Indeterminate; } break; case "Normal": { progressState = TaskbarProgressBarState.Normal; } break; case "Error": { progressState = TaskbarProgressBarState.Error; } break; case "Paused": { progressState = TaskbarProgressBarState.Paused; } break; } windowsTaskbar.SetProgressState(progressState, this.Handle); } }}
六、运行效果
上面DEMO程序的运行效果如下图:
1、进度条状态为TaskbarProgressBarState.Normal时,进度条为绿色,可用于展示正常状态
2、进度条状态为TaskbarProgressBarState.Pause时,进度条为黄色,可用于展示暂停状态
3、进度条状态为TaskbarProgressBarState.Error时,进度条为红色,可用于展示错误状态
七、DEMO工程下载
下载地址:http://pan.baidu.com/s/1hsyh3FY
END
- C#语言操作Win7系统任务栏(TaskBar)中程序图标的背景进度条
- Delphi之Windows Taskbar API 编程,包括任务栏进度条,图标覆盖,任务栏缩略图,跳转列表
- C#实现win7任务栏进度条
- 如何隐藏QT窗口在任务栏(taskbar)的任务图标
- 如何隐藏QT窗口在任务栏(taskbar)的任务图标
- 在VS2105中设置QT程序的图标ICON 和程序系统任务栏图标
- C# 实现任务栏图标程序
- C# 实现任务栏图标程序
- C# 实现任务栏图标程序
- win7任务栏操作中心(小白色旗子)图标不见了
- 设置win7任务栏程序图标显示方式
- 在C#中怎么让应用程序在任务栏上显示该程序的图标?
- win7 隐藏任务栏操作中心图标
- 解决win7系统任务栏音量图标消失
- 浅谈c#实现隐藏任务栏图标的Windows托盘程序
- 浅谈c#实现隐藏任务栏图标的Windows托盘程序
- Delphi2010/XE2下隐藏程序系统任务栏的图标
- 找回Windows7的“将此程序锁定到任务栏”功能(Pin to Taskbar / Pin to Start Menu)
- SQLServer2005如何批量修改架构名
- 007_debug Dockerfile
- 斗鱼TV Web API
- HTTP 中 GET 与 POST 的区别
- 如何在ubuntu16.04上添加开机自启动的python脚本
- C#语言操作Win7系统任务栏(TaskBar)中程序图标的背景进度条
- 了解数据转换器错误及参数-AD转换设计中的基本问题整理
- 当你输入一个网址/点击一个链接,发生了什么?(以www.baidu.com为例)
- lwip之回调函数
- TX
- 关于消息总线
- dmidecode
- SVN服务器搭建和使用(一)
- 使用Read Committed级别的隔离机制会出现的问题