C#语言操作Win7系统任务栏(TaskBar)中程序图标的背景进度条

来源:互联网 发布:外汇行情看盘软件 编辑:程序博客网 时间:2024/06/05 15:00
C#语言操作Win7系统任务栏(TaskBar)中程序图标的背景进度条
 收藏
 
  • 发表于 11个月前 
  • 阅读 266 
  • 收藏 1 
  • 点赞 0 
  • 评论 0

  https://my.oschina.net/Tsybius2014/blog/716122

摘要: C#语言操作Win7系统任务栏(TaskBar)中程序图标的背景进度条

一、问题描述

在使用火狐浏览器(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

阅读全文
0 0
原创粉丝点击