如何编写Windows 7的进度条以在任务栏上更新自身?

Windows 7具有一项非常棒的新function,应用程序可以通过状态栏报告当前活动的进度。 例如,使用Windows资源管理器复制文件时,任务栏中的应用程序图标顶部会显示一个进度条,并在更新时显示进度。

暴露进度条的API是什么? 是否有MSDN文档?

MSDN杂志中有一篇关于新任务栏API的文章 。 是的,function很棒:-)

从本质上讲,它都是关于实现IFileOperation 。 这里有一篇关于在托管代码中使用它的好文章。

适用于任何.NET版本的.NET 4或WinForms

使用Microsoft的Windows API代码包 (正如Keeron所提到的),它非常简单。 您只需要使用TaskbarManager 。 例如

要开始进步:

 TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal); 

要更新进度:

 TaskbarManager.Instance.SetProgressValue(currentValue, maxProgressValue); 

当你完成时,结束进度:

 TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress); 

你可以做的更多,但这应该让你开始,可能就是你所需要的。

对于带有WPF的.NET 4及更高版本

您可以使用System.Windows.Shell.TaskbarItemInfo 。 例如,在主窗口的Xaml中,您需要添加:

    

然后要更新进度,您可以执行以下操作:

 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; 

不要忘记,如果你在后台线程上做“工作”(对于长时间运行的任务可能是一个好主意),你需要切换回UI线程来更新任务栏。

如果您计划使用其他Windows 7任务栏function,另一种方法是使用Microsoft的库:用于.NET Framework的Windows API代码包, 旧链接不再提供,但可以在nuget上找到 。

我写了一篇关于在C#中实现Windows 7任务栏进度API的文章(参见: 带有C#和.NET的Windows 7任务栏进度栏 )。 该控件是开源的(BSD),并具有C#和VB.NET的示例项目。

这样您就不必从头开始转换C ++代码。