枚举 Internet Explorer 的收藏夹





3.00/5 (3投票s)
2000 年 9 月 10 日

99433

1400
一篇关于从 Internet Explorer 枚举用户收藏夹列表的文章
引言
最近我正在做一个项目,需要获取 Internet Explorer 中的收藏夹(也称为书签)列表。微软提供了一个 API,可以将所有收藏夹转储到一个遵循 Netscape 书签格式的文本文件中。但该文本文件不能满足我的需求。首先,我需要一个解析器来提取该文件中的所有信息;其次,IShellUIHelper
接口上的 ImportExportFavorites
方法调用需要用户选择是否要转储收藏夹。
这促使我寻找替代方案。答案是使用 Shell 编程 API。收藏夹存储在用户的配置文件中,作为常规文件夹和文件。因此,我可以使用文件属性来提取我需要的所有信息,即创建、修改和上次访问日期、URL、收藏夹的描述。在搜索过程中,我发现了一篇微软的文章,介绍了如何开始使用这种方法。在参考了该文章和一些我自己的想法后,我创建了这个 COM 对象 IFavoriteEngine
,它可以为我解决问题。
该实现展示了 Shell API 和一些 COM 概念的使用,并准备了系统上收藏夹的完整枚举。这个 COM 对象只有两种方法:
LoadFavorites | 此方法访问系统上的所有收藏夹并准备枚举列表。 |
GetFavoritesObjList 此方法返回由 LoadFavorites 方法调用创建的枚举。 |
GetFavoritesObjList
返回另一个 COM 对象 IFavoritesObjList
。该对象有自己的方法,可以调用这些方法来提取所有信息。该对象返回另一个 COM 对象 IFavoriteObject
。这是包含详细信息(例如日期、描述等)的对象。
SHGetSpecialFolderLocation
API 用于获取用户配置文件中的所有收藏夹列表。此调用的第二个参数是 CSIDL_FAVORITES
,表示它应该从用户配置文件中获取所有收藏夹。为了获取收藏夹文件和文件夹的其他属性,使用了 Win32 API GetFileAttributesEx
。
我包含了一个简单的 Win32 控制台应用程序,以演示如何使用 IFavoritesEngine
COM 对象来获取系统上的所有收藏夹。该代码使用 VC++6 (SP4) 在 Windows 2000, Adv Server (SP1) 上编写和编译。我只测试了调试版本。因此,如果您发现项目发布配置存在任何问题,请告诉我。