C#語言操做Win7系統任務欄(TaskBar)中程序圖標的背景進度條

1、問題描述

在使用火狐瀏覽器(47.0.1)下載文件時,我注意到個人Win7系統任務欄火狐程序圖標的背景部分會變成一個進度條,實時展現下載進度。html

因而我想了下怎麼用C#語言實現這個功能,也上網查了些資料。後來我發現問題並不像我想的這麼簡單,由於這個功能並不存在於.NET Framework中,而是被放在一組專門的庫中,庫的名字叫:Windows API Code Pack for Microsoft .NET Frameworkgit

參考文章:Windows API Code Pack for Microsoft .NET Frameworkgithub

https://blogs.msdn.microsoft.com/windowssdk/2009/06/12/windows-api-code-pack-for-microsoft-net-framework/windows

2、下載相關庫文件

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

3、添加引用

我使用的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 均可以直接在添加引用界面的引用列表中選擇並添加

這六個引用以下圖所示,其中須要下載的用綠色矩形標記,可直接添加引用的用紅色矩形標記。

4、繪製界面

界面控件以下圖所示:

5、編寫代碼

編寫代碼時,須要手動添加命名空間:

一、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);
        }
    }
}

6、運行效果

上面DEMO程序的運行效果以下圖:

一、進度條狀態爲TaskbarProgressBarState.Normal時,進度條爲綠色,可用於展現正常狀態

二、進度條狀態爲TaskbarProgressBarState.Pause時,進度條爲黃色,可用於展現暫停狀態

三、進度條狀態爲TaskbarProgressBarState.Error時,進度條爲紅色,可用於展現錯誤狀態

7、DEMO工程下載

下載地址:http://pan.baidu.com/s/1hsyh3FY

END

相關文章
相關標籤/搜索