IE收藏夹

本文深入探讨了Internet Explorer收藏夹的排序原理及其在不同Windows系统版本中的差异。揭示了如何通过注册表来调整IE工具栏中收藏夹的显示顺序,并分析了收藏夹项在注册表中的二进制存储格式。

IE收藏夹位于%USERPROFILE%//Favorites 中,在文件中可以按字母进行排序。然后IE工具栏所显示的顺序并不是按字母排序的,在注册表HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/MenuOrder/Favorites下有一个字段order保存了IE工具栏中的顺序。可以直接把这个键及包含的内容删除,这样IE工具栏中所显示的Favorites顺序就是按字母排序的。

Windows提供了一个COM对象ShellUIHelpers可以操纵IE的Favorites。这个对象提供一个接口IShellUIHelper支持函数ImportExportFavorites 可以实现IE收藏的导入和导出,以HTML文件的格式。但是其顺序 不是按字母顺序,也不是按IE工具栏的顺序,具体的排序准则,我也没搞清楚,请会员教之。

如果在自己的程序中希望加入的Favorites和IE工具栏有一样的顺序那只能读取Order的值然后提取顺序。Order的值是以二进制方式存放的,所以要找出数据表示的格式,因为没有找到相关资料,只能一个字节一个字节分析。

每个order开头的8个字节都是不变的,猜想可能是标识之类的。随后的四个字节指出整个order的大小(不包括标识),下面的4个字节,我看到都是1,具体含义没有得出,接着的4个字节就是有多少个favorites项了。

每个favorite项中,开始4个字节是项所占的空间大小。随后的4个字节没有什么变化。再后的4个字节我猜想是编码方式,在实际中我就把这用于编码方式。下面的4个字节,指示当前这个favorite以文件的方式所占的大小,即URL文件大小。再后4个字节不知道是什么意思,随后的2个字节是类型字段,表示是文件夹还是URL文件。下面就是在IE工具栏对应的URL文件名,如果文件名超过8.3,则后面再有一个短文件名。下面是我定义的结构表示。

struct

{

 

HeaderFavoritesint one; // 8

 

int two; // 2

 

int TotalSize; // totalsize of buffer not include one and two fields.

 

int four; // 1

 

int Number; // num of items include folders and files

};

struct

{

 

ItemFavoriteint SizeItem; // the size of total bytes in one item

 

int noa; // always FFFFFFFB

WORD code1;

// the fields might be used as code page???

WORD code2;

 

int FileSize; // the size of file, if folder, 0; bytes

 

WORD Type;

int noc;// 0x10 folder (FILE_ATTRIBUTE_DIRECTORY); 0x20 url (FILE_ATTRIBUTE_ARCHIVE) to see WIN32_FIND_DATA.dwFileAttributes

};

 

这些都是我猜想出来的,并且已经用于项目,如果有高人更理解相关内容,请教之。

 

不幸的是,MenuOrder中的数据格式在2K和XP下是不一样的,以上说的是在2K下研究出来的,下面再说说XP下的格式,同样是猜出来的,而且还不完整。作2K一样,header区域是一样的。就是每个Item子项的具体做法不同.

item header

short name

item content

long name

其中第一项和2k没有差别,但是short name的存放长度还是不一样的。其最大长度可以是12个字符,因为是unicode编码,所以是24个byte。如果文件名的长底小于12个字符,那就按实际长度分配。然后就是item的一些信息了,占20个字节,再下面才是实际的文件名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值