如何为 Windows 7 编写进度条以在任务栏上进行自我更新?

     2023-02-25     165

关键词:

【中文标题】如何为 Windows 7 编写进度条以在任务栏上进行自我更新?【英文标题】:How do I code a progress bar for Windows 7 to also update itself on the taskbar? 【发布时间】:2010-11-11 21:45:35 【问题描述】:

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

显示进度条的 API 是什么?上面有 MSDN 文档吗?

【问题讨论】:

【参考方案1】:

如果您打算使用其他 Windows 7 任务栏功能,另一种方法是使用 Microsoft 提供的库:Windows API Code Pack for .NET Framework,old link 不再提供,但可以在 @ 987654322@.

【讨论】:

【参考方案2】:

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

使用 Microsoft 的 Windows API Code Pack(正如 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 中,您需要添加:

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

【讨论】:

Windows API CodePack 链接是一个损坏的链接,尽管nuget.org/packages/Microsoft.WindowsAPICodePack-Core 仍然可以从 nuget 获得它 答案和评论中链接的包实际上并不包含所需的类。该类在 Shell 包中:nuget.org/packages/WindowsAPICodePack-Shell 在系统属性 > 高级 > 性能选项 > 视觉效果中禁用“任务栏和开始菜单中的动画”选项时,我花了一段时间才发现 Indeterminate 不起作用。 记住 .ProgressValue 以从 0 到 1 的分数运行也很重要【参考方案3】:

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

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

【讨论】:

你的第二个链接好像坏了 我将链接改为archive.org。【参考方案4】:

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

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

【讨论】:

Windows 7 的任务栏上的 Delphi 表单图标模糊(启用 MainFormOnTaskbar)

】Windows7的任务栏上的Delphi表单图标模糊(启用MainFormOnTaskbar)【英文标题】:DelphiformiconsareblurryonWindows7\'staskbar(withMainFormOnTaskbarenabled)【发布时间】:2011-02-0623:40:59【问题描述】:我们有一个用Delphi编写的Windows桌面应用程序,... 查看详情

有关如何在 c# 中为 Windows 7 任务栏编码所需的信息

】有关如何在c#中为Windows7任务栏编码所需的信息【英文标题】:InformationneededonhowtocodeforWindows7Taskbarinc#【发布时间】:2011-04-2017:23:00【问题描述】:到目前为止,我对如何为win7任务栏功能编写代码的了解是,我可以在.net3.5或pinv... 查看详情

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

】C#任务栏中的Windows7进度条?【英文标题】:Windows7progressbarintaskbarinC#?【发布时间】:2010-11-2017:17:27【问题描述】:如果您在Windows7测试版中注意到,如果您复制文件或其他系统操作,任务栏中的Windows资源管理器图标将填满一... 查看详情

如何为 Gradle 任务指定类别?

】如何为Gradle任务指定类别?【英文标题】:HowcanIspecifyacategoryforaGradletask?【发布时间】:2015-07-1306:11:06【问题描述】:我正在IntellijIDEA中编写Gradle任务。我注意到在Gradle窗口中,任务出现在如下文件夹下:我想知道,你如何给... 查看详情

在windows中任务栏上的内容为

在Windows中,任务栏上的内容包括:1.开始菜单2.托盘图标3.打开的程序和文档4.时钟5.网络连接图标6.音量控制图标7.搜索框参考技术AWindows“任务栏”上的内容是:静态(一般不会更改)存放的是程序的快捷打开图标及开始等功能按... 查看详情

如何在 Windows 7 任务栏中显示进度(使用 Qt)?

】如何在Windows7任务栏中显示进度(使用Qt)?【英文标题】:Howtoshowprogressinwindows7taskbar(usingQt)?【发布时间】:2011-05-1923:14:28【问题描述】:有没有办法使用Qt访问windows7进度条?我目前正在使用Qt4.7.0和QtCreator。我已经找到Q7Goodi... 查看详情

你如何为 Windows 7 安装 angular-cli

】你如何为Windows7安装angular-cli【英文标题】:Howdoyouinstallangular-cliforwindows7【发布时间】:2017-06-0711:26:04【问题描述】:我正在尝试为Windows安装angular-cli。我知道命令是npminstall-gangular-cli,但是一旦我运行此命令,我就会尝试执... 查看详情

如何为联系人提供 UI 以在 CRM Dynamics 中更新他们的详细信息?

】如何为联系人提供UI以在CRMDynamics中更新他们的详细信息?【英文标题】:HowtoprovideUItocontactstoupdatetheirdetailsinCRMDynamics?【发布时间】:2013-10-2111:07:09【问题描述】:我们在测试服务器上部署了一个DynamicsCRM门户。我们有此门户... 查看详情

如何为 Windows 7 x64 构建 Git 2.4.5?

】如何为Windows7x64构建Git2.4.5?【英文标题】:HowcanIbuildGit2.4.5forWindows7x64?【发布时间】:2015-07-0115:59:12【问题描述】:我下载了代码源的zip文件并将其解压缩。如果我尝试通过MSVisualStudio2013的nmake实用程序构建这些源,则会出现... 查看详情

如何为mesos和HAProxy进程编写prometheus警报规则。?

】如何为mesos和HAProxy进程编写prometheus警报规则。?【英文标题】:HowtowriteprometheusalertrulesformesosandHAProxyprocessdown.?【发布时间】:2016-08-3008:55:19【问题描述】:我正在处理一项需要配置和验证prometheusalertmanager的任务。当mesos进程... 查看详情

如何为 Win32 应用程序设置任务栏图标?

...on?【发布时间】:2019-04-1920:05:45【问题描述】:我正在为Windows10创建一个简单的Win32GUI应用程序。我想设置一个图标,当它打开时会出现在任务栏中。我已经在资源文件中定义了一个图标,但它只出现在文件资源管理器中的exe文... 查看详情

如何为无效的电子邮件地址编写基本检查[重复]

】如何为无效的电子邮件地址编写基本检查[重复]【英文标题】:Howtowriteabasiccheckforaninvalidemailaddress[duplicate]【发布时间】:2012-11-2710:19:44【问题描述】:可能重复:HowtovalidateanemailaddressinPHP下面我有一段代码用于检查有效的电子... 查看详情

如何为 collectionviewcell 内的进度条创建 IBOutlet?

】如何为collectionviewcell内的进度条创建IBOutlet?【英文标题】:HowtoIcreateanIBOutletforaprogressbarthatisinsideacollectionviewcell?【发布时间】:2018-08-2416:15:18【问题描述】:我在collectionviewcell中有一个进度条。我想为进度条添加一个边框半... 查看详情

如何为我的 iOS 应用创建深层链接以在 Facebook 中使用?

】如何为我的iOS应用创建深层链接以在Facebook中使用?【英文标题】:HowtocreatethedeeplinkformyiOSappforuseinFacebook?【发布时间】:2016-09-1010:47:56【问题描述】:我想从我的业务页面的Facebook主按钮链接到我的iOS应用程序。然而,这似乎... 查看详情

如何为 CAKeyFrameAnimation 设置端点?

】如何为CAKeyFrameAnimation设置端点?【英文标题】:HowdoIsetanendpointforaCAKeyFrameAnimation?【发布时间】:2021-10-0615:24:58【问题描述】:我正在使用弧线作为进度条。有一个跟踪层,进度指示器沿着它移动,我还有一个随着进度条移动... 查看详情

如何为子目录中的 C# 文件编写 DependentUpon 子句?

...用程序编译和运行bothVisualStudio10(带有Microsoft编译器)、Windows和在Linux上使用gmcs进行MonoDevelop但是, 查看详情

如何为不同类型的用户提供不同的访问权限以在 Firebase 中登录?

】如何为不同类型的用户提供不同的访问权限以在Firebase中登录?【英文标题】:HowtogivedifferentaccesstodifferenttypeofuserforlogininFirebase?【发布时间】:2016-10-2020:16:31【问题描述】:我正在Android上创建一个应用程序,其中我使用Firebase... 查看详情

如何为 localhost 网站配置 IIS 7?

...2016-10-1302:54:00【问题描述】:我是Asp.Net的新手我在我的Windows系统上启用了IIS7的功能,并且能够看到IIS管理器。我创建了一个应用程序,但通过VisualStudio构建/运行应用程序,它进入浏览器并使用不同的端口号运行应用程序。当... 查看详情