首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

桌面外壳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?》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210324A0CHAT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券