首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#中任务栏中的Windows 7进度条?

C#中任务栏中的Windows 7进度条?
EN

Stack Overflow用户
提问于 2009-08-19 03:13:06
回答 5查看 33.5K关注 0票数 75

如果你在Windows7测试版中注意到,如果你复制文件或其他系统操作,任务栏中的Windows资源管理器图标将填充一个绿色的进度条,相当于窗体上的进度条。在我的C#表单中,有没有一种方法可以让我的任务栏进度条与我正在做的任何任务的进度相匹配?转换,传输,生成,这个进度条有很多用途。

EN

回答 5

Stack Overflow用户

发布于 2014-06-12 22:37:15

我只想在我的WinForms应用程序中添加一些任务栏进度动画,而不必下载代码包或切换到WPF来使用TaskbarItemInfo。

解决方案是一个使用ITaskbarList3接口的类:

代码语言: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.SetState(this.Handle, TaskbarProgress.TaskbarStates.Indeterminate);

or

TaskbarProgress.SetValue(this.Handle, 50, 100);
TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Error);
票数 85
EN

Stack Overflow用户

发布于 2009-08-18 19:16:20

Stack Overflow用户

发布于 2009-08-18 19:20:32

是的,微软在以下文档中介绍了新的任务栏功能(包括源代码):Windows 7 taskbar: Developer Resources

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

https://stackoverflow.com/questions/1295890

复制
相关文章

相似问题

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