Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中任务栏中的Windows 7进度条?_C#_Windows 7_Progress Bar - Fatal编程技术网

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

C#中任务栏中的Windows 7进度条?,c#,windows-7,progress-bar,C#,Windows 7,Progress Bar,如果您注意到在Windows7测试版中,如果您复制文件或其他系统操作,任务栏中的Windows资源管理器图标将填充一个绿色进度条,相当于窗体上的进度条。在我的C#表单中,有没有一种方法可以强制我的任务栏进度条与我正在做的任何任务的进度相匹配?转换、传输、生成,进度条有很多用途。查看。是的,您需要使用此API 是的,Microsoft在以下文档(包括资料来源)中介绍了新的任务栏功能:适用于那些想跳过文档阅读,只想获得一些有用的东西的人 下载 运行创建zip文件的安装程序 从zip文件的binar

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

查看。

是的,您需要使用此API


是的,Microsoft在以下文档(包括资料来源)中介绍了新的任务栏功能:

适用于那些想跳过文档阅读,只想获得一些有用的东西的人

  • 下载
  • 运行创建zip文件的安装程序
  • 从zip文件的binaries文件夹中提取以下DLL:
    • Microsoft.WindowsAPICodePack.dll
    • Microsoft.WindowsAPICodePack.Shell.dll
  • 在项目中添加对它们的引用
  • 将以下代码放入应用程序中,并根据需要进行修改:
--

int max=100;
var prog=Microsoft.WindowsAPICodePack.Taskbar.TaskbarManager.Instance;
prog.SetProgressState(Microsoft.WindowsAPICodePack.Taskbar.TaskbarProgressBarState.Normal);

对于(int i=0;i我发现了一篇漂亮的文章(),它为任务栏进度条问题提供了一个简单的解决方案。总之,它指示您下载Windows API包,添加对其中包含的Microsoft.WindowsAPICodePack.Shell.dll的引用,最后向应用程序添加三行代码:

Imports Microsoft.WindowsAPICodePack
Imports Microsoft.WindowsAPICodePack.Taskbar
// ...
TaskbarManager.Instance.SetProgressValue(X, 100)

其中X是要显示的进度。

我只是想在WinForms应用程序中添加一些任务栏进度动画, 无需下载代码包或切换到WPF即可使用TaskbarItemInfo

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

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);
    }
}
它的易用性示例:

TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Indeterminate);

or

TaskbarProgress.SetValue(this.Handle, 50, 100);
TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Error);

甚至包括了一个关于这个主题的视频。需要.NET 3.5或4。似乎不适用于。NET 2.3.5是随Windows 7一起发布的,根据遗嘱,包括在XP上运行时中断应用程序(安装了.NET 3.5/4.0)注意,所以答案应该是搜索解决方案的终点(与参考文献的另一个中途停留相比,随着时间的推移,参考文献往往会变得陈旧)请考虑在这里添加一个独立的概要,将链接作为参考。这是一个非常奇妙的答案;没有外部依赖性或下载,而只是想添加SETOFLADICANION的Worksif,正如我所做的那样,一定要以正确的顺序添加所有其他方法。在Windows XP上运行时执行此操作!有解决方案吗?解决方案是确保您在XP中不执行此操作。@KevinVuilleumier真正的解决方案是在运行代码之前检查Windows版本nuget下载有点烦人,但的确非常有效。在我的进度条处理程序类中实现:)@Nyerguds:nuget下载的说明是什么?只需在nuget的控制台上复制并粘贴该命令,您就完成了。这意味着必须下载并安装另一个东西…即nuget。我在使用链接的Microsoft的WindowsAPICodePack时遇到了问题(我的应用程序在启动时由于需要强名称库而崩溃).非官方的nuget套餐对我更合适。
TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Indeterminate);

or

TaskbarProgress.SetValue(this.Handle, 50, 100);
TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Error);