桌面外壳API之小技巧一枚
标志位SHGFI_USEFILEATTRIBUTES的用法
对于Windows桌面外壳API SHGetFileInfo来说,你可以向它传递一个特殊的标志位SHGFI_USEFILEATTRIBUTES。那么,这个标志位是什么意思呢?
Well,它的意思是告诉Windows外壳:请不要访问磁盘,并且假装我指定的文件/文件夹存在,并且文件/文件夹的属性是我传递给你的dwFileAttributes参数。请不要管文件/文件夹是否真实存在,按我说的做就行了。
这个标志位的一个使用场景是,你可以通过它来获取某种文件类型的图标。举个例子,为了获取文本文件类型的图标,你可以向SHGetFileInfo传递一个文件名”x.txt”,并在它的uFlags中使用SHGFI_USEFILEATTRIBUTES,同时,指定文件的属性为FILE_ATTRIBUTE_NORMAL。
为什么需要使用文件名”x.txt”?
因为你需要得到的是一个文本类型文件的图标,并且你希望它是一个有效合法的文件名。
(请不要向它传递一个无效的文件名,例如”???.txt”)
为什么使用FILE_ATTRIBUTE_NORMAL作为文件属性?
因为你希望SHGetFileInfo假装它是一个普通文件,如果你传递FILE_ATTRIBUTE_DIRECTORY,则你会得到文件夹的图标,因为你通过此参数告诉SHGetFileInfo假装”x.txt”是一个文件夹,而不是文件。
请注意,因为这个假装的动作,某些动态的属性信息可能无法获取。举个例子,如果某个文件类型的图标是根据文件的内容动态变化的,则这动态变化的图标不会被返回,因为,毕竟,你是告诉API要假装文件存在,而一个虚构的文件根本不会存在任何内容。
总结
当里个当,所以咱们设计API的原则就是:缺那啥就补那啥。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《What does SHGFI_USEFILEATTRIBUTES mean?》
- 下一篇: 说说上古时代的主线程模式
- 上一篇: 最小化所有窗口和显示桌面的区别
相关推荐
- 更简洁,更优雅,但是很难看懂的代码
- Posted on 03月30日
- OpenStack专题:准备工作
- Posted on 11月15日
- 关于x86平台上内存对齐的重要性,第二部分
- Posted on 09月24日
- 新鲜货:使用ASan检测内存越界问题
- Posted on 10月27日
评论已关闭。