Winforms-C#任务栏进度指示器Windows 10

问题描述

Windows 10 上使用C#* Windows窗体,可以在任务栏上设置进度指示器 图标?在搜索它时,几乎所有结果都定向到Windows7。我尝试使用 WindowsAPICodePack TaskbarItemInfo TaskbarManager 等。没有工作。以下是一些代码片段:

return config
taskBarItemInfo.ProgressState = TaskbarItemProgressState.Normal;

for (int i = 0; i < 100; i++)
{
    taskBarItemInfo.ProgressValue = i / 100.0;
    Thread.Sleep(50); // whatever the 'work' really is
}

taskBarItemInfo.ProgressState = TaskbarItemProgressState.None;
using System;
using System.Runtime.InteropServices;

public static class TaskbarProgress
{
    public enum TaskbarStates
    {
        NoProgress    = 0,Indeterminate = 0x1,Normal        = 0x2,Error         = 0x4,Paused        = 0x8
    }

    [ComImport()]
    [Guid("ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    private interface ITaskbarList3
    {
        // ITaskbarList
        [PreserveSig]
        void HrInit();
        [PreserveSig]
        void AddTab(IntPtr hwnd);
        [PreserveSig]
        void DeleteTab(IntPtr hwnd);
        [PreserveSig]
        void ActivateTab(IntPtr hwnd);
        [PreserveSig]
        void SetActiveAlt(IntPtr hwnd);

        // ITaskbarList2
        [PreserveSig]
        void MarkFullscreenWindow(IntPtr hwnd,[MarshalAs(UnmanagedType.Bool)] bool fFullscreen);

        // ITaskbarList3
        [PreserveSig]
        void SetProgressValue(IntPtr hwnd,UInt64 ullCompleted,UInt64 ullTotal);
        [PreserveSig]
        void SetProgressState(IntPtr hwnd,TaskbarStates state);
    }

    [ComImport()]    
    [Guid("56fdf344-fd6d-11d0-958a-006097c9a090")]
    [ClassInterface(ClassInterfaceType.None)]
    private class TaskbarInstance
    {
    }

    private static ITaskbarList3 taskbarInstance = (ITaskbarList3)new TaskbarInstance();
    private static bool taskbarSupported = Environment.OSVersion.Version >= new Version(6,1);

    public static void SetState(IntPtr windowHandle,TaskbarStates taskbarState)
    {
        if (taskbarSupported) taskbarInstance.SetProgressState(windowHandle,taskbarState);
    }

    public static void SetValue(IntPtr windowHandle,double progressValue,double progressMax)
    {
        if (taskbarSupported) taskbarInstance.SetProgressValue(windowHandle,(ulong)progressValue,(ulong)progressMax);
    }
}

*我的项目当前使用.NET Framework 4.7.2

预先感谢

解决方法

旧答案:

在你的电脑中找到“presentationframework.dll”,就像“C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF”

然后,将其添加到您的项目中的引用,并在您的代码中添加“使用 System.Windows.Shell”。

再次尝试上面的代码。

—————————————————

我必须进一步解释 以上库和类应用于WPF程序

对于C#WinForm,必须下载Microsoft.WindowsAPICodePack.dll和Microsoft.WindowsAPICodePack.Shell.dll,导入到工程中,然后使用如下代码:

使用 Microsoft.WindowsAPICodePack.Taskbar;

在表单类中: private TaskbarManager TaskbarProcess = TaskbarManager.Instance;

在 Form 事件中: TaskbarProcess.SetProgressState(TaskbarProgressBarState.Normal); TaskbarProcess.SetProgressValue(current,total);

我在Win10 64bit和VS2017 .net4.5下测试过,上面的方法是可以的。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...