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

时间:2009-07-18 02:54:11

标签: c# .net c++ windows-7

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

用于公开进度条的API是什么?是否有MSDN文档?

4 个答案:

答案 0 :(得分:39)

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

使用Microsoft的Windows API Code Pack(正如Keeron所提到的),它非常简单。您只需使用TaskbarManager即可。 E.g。

开始进度:

TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal);

更新进度:

TaskbarManager.Instance.SetProgressValue(currentValue, maxProgressValue);

当你完成时,结束进展:

TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress);

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

对于使用WPF的.NET 4及更高版本

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

<Window.TaskbarItemInfo>
    <TaskbarItemInfo x:Name="taskBarItemInfo" />
</Window.TaskbarItemInfo>

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

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线程来更新任务栏。 / p>

答案 1 :(得分:12)

MSDN杂志上有一篇关于the new taskbar APIs的好文章。是的,该功能非常棒: - )

基本上,这都是关于实施IFileOperation的。有一篇关于在托管代码here中使用它的文章。

答案 2 :(得分:5)

如果您计划使用其他Windows 7任务栏功能,另一种方法是使用Microsoft的库:Windows API的Windows API代码包,old link已不再提供,但可以找到在nuget

答案 3 :(得分:1)

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

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