首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Winforms - C#任务栏进度指示器(Windows 10)

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

Stack Overflow用户
提问于 2020-08-12 18:54:47
回答 1查看 1.2K关注 0票数 1

使用C#* Windows窗体 on Windows 10,是否有方法在任务栏图标上设置进度指示符?在搜索时,几乎所有的结果都指向了Windows7。我尝试使用WindowsAPICodePack、TaskbarItemInfo、TaskbarManager和其他工具。都没起作用。下面是一些代码片段:

代码语言:javascript
运行
复制
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;
代码语言:javascript
运行
复制
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);
    }
}
代码语言:javascript
运行
复制
TaskbarProgress.SetValue(this.Handle, 50, 100);
TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Indeterminate);

*我的项目目前使用.NET框架4.7.2

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-07 14:13:57

旧的答案:

在您的计算机中找到"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;

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

在形式上: TaskbarProcess.SetProgressState(TaskbarProgressBarState.Normal);TaskbarProcess.SetProgressValue(当前,总计);

我在Win10 64位和VS2017 .net4.5中进行了测试,上面的方法是可以的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63383067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档