随笔 - 59  文章 - 0  评论 - 340  阅读 - 34万 

准备


Windows 7 Beta已经公开发布了的,可从http://www.microsoft.com/windows/windows-7/beta-download.aspx下载。W7在任务栏上做了很大的改进,关于任务栏的新特性可以看一下http://blogs.msdn.com/e7/archive/2008/11/20/happy-anniversary-windows-on-the-evolution-of-the-taskbar.aspx。如果要对Windows 7进行开发最好看一下白皮书,可以从http://code.msdn.microsoft.com/PDC08WhitePapers/Release/ProjectReleases.aspx?ReleaseId=1797下载。我们对任务栏进行开发会用到Windows 7 Taskbar Enhancements。这里我们主要实现在任务栏的图标中显示进度(Overlay Icons and Progress Bars)。在实现过程中还可能需要用到Windows 7 SDK Beta。


开始


首先在Windows SDK中找到ShObjIdl.idl文件,如果没有安装SDK可以在文后下载。这是一个接口定义语言文件,为了方便调用,我们可以将类似

1HRESULT SetProgressValue(
2        [in] HWND hwnd,
3        [in] ULONGLONG ullCompleted,
4        [in] ULONGLONG ullTotal);


这样的接口声明改为

1HRESULT SetProgressValue(
2        [inlong hwnd,
3        [in] ULONGLONG ullCompleted,
4        [in] ULONGLONG ullTotal);


也就是把HWND类型改成long。然后用midl将改过的idl文件生成二进制的tlb文件, ShObjTlb.tlb是生成的文件,ShObjIdl.idl是原文件。


再用tlbimp将tlb文件生成托管dll文件。


在项目中添加对该dll的引用,然后就可以像引用托管dll一样调用其中的方法了。
要实现在任务栏图标中显示进度主要用到2个函数,SetProgressState和SetProgressState。
SetProgressState方法的第一个参数是句柄,第二个参数是个枚举变量,表示当前图标的状态,我们可自己定义一个枚举来表现这些状态

复制代码
1private enum TbpFlag
2        {
3            TBPF_ERROR = 1,
4            TBPF_PAUSED = 2,
5            TBPF_NORMAL = 3,
6            TBPF_INDETERMINATE = 4,
7        }
;
复制代码


然后就可以使用SetProgressState( (int)this.Handle , TBPFLAG.TBPF_NORMAL);将图标状态设置成正常状态。
SetProgressValue((int)this.Handle, 50, 100);可以设置进度,第一个参数是句柄,第二个参数是已完成量,第三个参数是总量。
关于这些函数的详细使用方法请查看Windows 7 SDK或英文版的MSDN Library。


效果


20%完成时:


50%完成时:


100%完成时: 

其他


根据这个方法并参照PDC2008的白皮书中的介绍可以用托管语言实现其他Windows 7的新功能。


非托管代码

如果用C++实现这个功能将更简单,可以参考Windows SDK,路径是Microsoft SDKs\Windows\v7.0\Samples\winui\Shell\TaskbarIntegration\PeripheralStatus

代码及相关文件下载

1. 完整示例下载

2. ShObjIdl.idl下载


更新

现在还可以通过 Windows® API Code Pack for Microsoft® .NET Framework 来使用 Windows7 中的新特性。详细信息请参阅http://code.msdn.microsoft.com/WindowsAPICodePack

 

posted on   Magic.Z  阅读(2746)  评论(10编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示