Windows 7 taskbar progress works in one app but not another
我有两个不同的应用程序,都是用 C Builder 2009 编写的本机应用程序,都是 MDI,并且都使用相同的进度条实用程序代码。其中之一正确更新了 Windows 7 任务栏的进度。另一个没有。
我找不到这两个应用程序之间的任何明显差异。在失败的应用程序中没有报告错误:对 ITaskbarList3::SetProgressValue 和 ITaskbarList3::SetProgressState 的调用返回 S_OK,但在 Windows 7 任务栏中没有任何反应。
在使 Windows 7 任务栏进度条正常工作方面有什么问题吗?我可能缺少任何要求吗?
- 它们在同一台机器上运行吗?你不提那个。如果不是,一台机器是否使用小图标作为任务栏而另一台使用大图标?您只会获得带有大图标的叠加层(包括进度条)。
-
@Kate:是的,它们在同一台机器上运行,并且都使用大任务栏图标。
-
此实用程序代码是否放置在您的两个应用程序的同一部分中,或者是否有任何(甚至是最轻微的)差异?由于您提到这两个应用程序都是 MDI,因此请尝试跟踪两种情况下 Windows 消息的进度更新必须经过的路径。我猜如果应用程序无法按预期工作,进度更新消息不会进入主(应用程序)消息循环。然而,这只是一个猜测,因为我没有使用此功能的实际经验。
我的问题可能是 Delphi/C Builder 特有的,是 VCL 处理其顶级窗口的方式不同的结果。
如果 Application.MainFormOnTaskBar 为真,则 ITaskbarList3 仅在 Application.MainFormHandle 用作 HWND 参数时才有效。
如果 Application.MainFormOnTaskBar 为假,则 ITaskbarList3 仅在 Application.Handle 用作 HWND 参数时才有效。
在我的例子中,一个项目 MainFormOnTaskBar 为真,一个项目为假。
我没有专门使用 Windows 7 进度条编写应用程序,但我编写了许多需要使用实时动画更新进度的 .Net 应用程序,而我的经验中最大的问题是确保您正在更新进度条主线程。