在使用火狐瀏覽器(47.0.1)下載文件時,我注意到個人Win7系統任務欄火狐程序圖標的背景部分會變成一個進度條,實時展現下載進度。html
因而我想了下怎麼用C#語言實現這個功能,也上網查了些資料。後來我發現問題並不像我想的這麼簡單,由於這個功能並不存在於.NET Framework中,而是被放在一組專門的庫中,庫的名字叫:Windows API Code Pack for Microsoft .NET Frameworkgit
參考文章:Windows API Code Pack for Microsoft .NET Frameworkgithub
Windows API Code Pack 彷佛已經很難被找到,後來我在這個stackoverflow的問題裏找到了下載地址:api
http://stackoverflow.com/questions/24081665/windows-api-code-pack-where-is-it瀏覽器
這個問題中給出了一組下載地址:函數
一、https://www.nuget.org/packages/WindowsAPICodePack-Coreui
二、https://www.nuget.org/packages/WindowsAPICodePack-ExtendedLinguisticServicesthis
三、https://www.nuget.org/packages/WindowsAPICodePack-Sensorsspa
四、https://www.nuget.org/packages/WindowsAPICodePack-Shell
五、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個引用:
一、Microsoft.WindowsAPICodePack.dll、Microsoft.WindowsAPICodePack.Shell.dll 須要咱們從以前下載的 Windows API Code Pack 中引入
二、PresentationCore.dll 若是沒有須要咱們另行下載,這裏給出一個下載地址:
http://www.121down.com/soft/softview-33650.html
三、PresentationFramework、System.Xaml、WindowsBase 均可以直接在添加引用界面的引用列表中選擇並添加
這六個引用以下圖所示,其中須要下載的用綠色矩形標記,可直接添加引用的用紅色矩形標記。
界面控件以下圖所示:
編寫代碼時,須要手動添加命名空間:
一、Microsoft.WindowsAPICodePack.Shell
二、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程序的運行效果以下圖:
一、進度條狀態爲TaskbarProgressBarState.Normal時,進度條爲綠色,可用於展現正常狀態
二、進度條狀態爲TaskbarProgressBarState.Pause時,進度條爲黃色,可用於展現暫停狀態
三、進度條狀態爲TaskbarProgressBarState.Error時,進度條爲紅色,可用於展現錯誤狀態
下載地址:http://pan.baidu.com/s/1hsyh3FY
END