设为首页 收藏本站
查看: 1514|回复: 0

用托管代码调用 Windows 7 任务栏的新功能

[复制链接]

尚未签到

发表于 2015-5-9 07:50:46 | 显示全部楼层 |阅读模式
准备
  
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可以在文后下载。这是一个接口定义语言文件,为了方便调用,我们可以将类似


1 DSC0000.gif HRESULT SetProgressValue(
2        [in] HWND hwnd,
3        [in] ULONGLONG ullCompleted,
4        [in] ULONGLONG ullTotal);  
这样的接口声明改为


1HRESULT SetProgressValue(
2        [in] long hwnd,
3        [in] ULONGLONG ullCompleted,
4        [in] ULONGLONG ullTotal);  
也就是把HWND类型改成long。然后用midl将改过的idl文件生成二进制的tlb文件, ShObjTlb.tlb是生成的文件,ShObjIdl.idl是原文件。
DSC0001.jpg
再用tlbimp将tlb文件生成托管dll文件。
DSC0002.jpg
在项目中添加对该dll的引用,然后就可以像引用托管dll一样调用其中的方法了。
要实现在任务栏图标中显示进度主要用到2个函数,SetProgressState和SetProgressState。
SetProgressState方法的第一个参数是句柄,第二个参数是个枚举变量,表示当前图标的状态,我们可自己定义一个枚举来表现这些状态

1private enum TbpFlag
2 DSC0003.gif DSC0004.gif          DSC0005.gif {
3 DSC0006.gif             TBPF_ERROR = 1,
4            TBPF_PAUSED = 2,
5            TBPF_NORMAL = 3,
6            TBPF_INDETERMINATE = 4,
7 DSC0007.gif         };  
然后就可以使用SetProgressState( (int)this.Handle , TBPFLAG.TBPF_NORMAL);将图标状态设置成正常状态。
SetProgressValue((int)this.Handle, 50, 100);可以设置进度,第一个参数是句柄,第二个参数是已完成量,第三个参数是总量。
关于这些函数的详细使用方法请查看Windows 7 SDK或英文版的MSDN Library。

效果

  
20%完成时:
DSC0008.jpg
50%完成时:
DSC0009.jpg
100%完成时:  
DSC00010.jpg
其他
  
根据这个方法并参照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  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-65111-1-1.html 上篇帖子: OpenXLive——开启Windows Phone 7游戏社交平台新时代 下篇帖子: Windows Phone 7 页面导航以及异常处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表