开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7448|回复: 11
收起左侧

[技术专题] 【易】Windows Shell 外壳编程系列1 - 基础,优雅枚举文件的开端

[复制链接]

结帖率:100% (4/4)
发表于 2020-6-25 16:14:30 | 显示全部楼层 |阅读模式   四川省宜宾市

前言:

基础,浏览一个文件夹:

  • 我们知道,在win32中是以外壳名字空间的形式来组织文件系统的,在外壳名字空间里的每一个对象(注)都实现了一个IShellFolder的接口,通过这个接口我们可以直接cha询或间接得到其他相关的接口。
    • 注:这里的对象指的是外壳名字空间中的一个节点,对象有可能是一个文件夹,有可能是一个文件,也有可能是一个虚拟文件夹,例如:我的电脑,网上邻居,控制面板等

获取“桌面”

  • 首先我们必须了解,在外壳编程中,要使用 PIDL 路径代替普通路径(如果对 PIDL 不熟悉,请看Windows外壳名字空间的浏览)。

  • “桌面”是最顶级的文件夹,外壳名字空间中其他各项都可以用从“桌面”开始的 PIDL 加以表示。

  • 如何获取“桌面”的 PIDL 和其 IShellFolder 接口呢,可以通过 API SHGetDesktopFolder:

  • 本部分代码十分简单,易友可自行探索:

获取其他文件夹:

  • 这里我首先声明一下:由于我的水平有限,代码使用的是SHBindToParent()来取接口,非原贴中的BindToObject,SHBindToParent则会取得当前文件的父文件夹的IShellForlder接口,所以枚举时会枚举父文件夹的文件,至于更多??那我不做解释了。

“优雅地”枚举文件

  • 微软官方提供的IID_IEnumIDList得先抄一份:

  • 枚举方法:使用IID_IEnumIDList->Next()指令读取文件夹的pItem(注意装换出的是Shell路径),接着再用SHGetDataFromIDListA读出文件基本信息就OK。

  • 效果图:   - 提示:枚举出来的是提供的路径的父文件夹的文件,而且只是文件

  • 思维拓展:可以尝试用SHGetDataFromIDListW来读取文件的信息哦!!

PS:

  • 最后说一句:如果你觉得可以的话,请:
  • 您的评分是作者最大的动力,留下您的好评吧!

最后,源码:


windows shell外壳 - 浏览一个文件夹.e (14.93 KB, 下载次数: 51)

评分

参与人数 1好评 +1 精币 +5 收起 理由
1051496412 + 1 + 5 感谢分享,很给力!~

查看全部评分


结帖率:33% (2/6)

签到天数: 20 天

发表于 2024-9-8 15:04:17 | 显示全部楼层   广东省湛江市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:100% (7/7)

签到天数: 11 天

发表于 2024-3-18 22:08:27 | 显示全部楼层   江西省吉安市
感谢分享~~~~~~~
回复 支持 反对

使用道具 举报

结帖率:90% (9/10)

签到天数: 4 天

发表于 2022-5-24 19:14:17 | 显示全部楼层   江苏省苏州市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)

签到天数: 12 天

发表于 2020-8-1 10:09:05 | 显示全部楼层   湖南省湘潭市
瀛﹀氨瀹屼簡锛屾劅璋㈡ゼ涓伙紝妤间富鍒嗕韩绮剧涓囧瞾锛侊紒锛
回复 支持 反对

使用道具 举报

发表于 2020-7-3 17:28:13 | 显示全部楼层   广西壮族自治区南宁市

感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
发表于 2020-6-29 19:36:46 | 显示全部楼层   山东省菏泽市
感谢楼主分享教程!
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 15 天

发表于 2020-6-27 22:08:04 | 显示全部楼层   四川省泸州市

感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:83% (25/30)

签到天数: 6 天

发表于 2020-6-26 12:57:22 | 显示全部楼层   湖南省怀化市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:0% (0/3)

签到天数: 19 天

发表于 2020-6-26 01:28:14 | 显示全部楼层   重庆市重庆市
看看,是什么好东西
回复 支持 反对

使用道具 举报

签到天数: 11 天

发表于 2020-6-25 18:13:48 | 显示全部楼层   广东省珠海市
谢谢分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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