|
前言:
基础,浏览一个文件夹:
- 我们知道,在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, 下载次数: 52)
|
评分
-
查看全部评分
|