如何取得系统图标,如URL快捷方式

问题的提出:为了取得URL快捷方式的图标。

 

如收藏夹中的CSDN.url,用记事本打开如下:

[InternetShortcut]
URL=http://community.csdn.net/
IDList=
IconFile=http://community.csdn.net/favicon.ico
IconIndex=1

 

一旦访问过这个网页,再回到收藏夹目录看这个URL文件,即可看到这个文件的图标已经变成CSDN的图标了。理论上来说,这个图标一定在硬盘的某个角落,否则是不会显示的。但从上述文件内容来看,http://community.csdn.net/favicon.ico这个ICO或对应的ICO保存在什么地方呢?我找了下临时文件夹,无果。于是只得寻求其他办法。

 

又想到既然是快捷方式,用IShellLink接口如何呢?用IShellLink的GetIconLocation是否可行呢?我没有验证,但这即使能成功,又涉及到SHELL扩展编程中的一些知识,比如获取PIDL等问题,代码略显繁琐。

 

最后想到用系统图标,即从系统图像列表中取得。

 

大致流程如下:

1、用SHGetFileInfo获得URL文件的SHFILEINFO结构,其中SHGetFileInfo的uFlags标志使用SHGFI_SYSICONINDEX;

2、SHGetFileInfo的返回值既是系统图形列表(imagelist)的句柄;

3、SHFILEINFO结构的iIcon即是图标在列表中的索引;

4、用ImageList_GetIcon即可列表中取得图标的句柄(至此基本大功告成了);

5、如果需要进一步获得直观的StdPicture对象,还需使用OleCreatePictureIndirect。

 

 

在此抛砖引玉,不知道大家是否有更好的办法?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值