上网时间长了,总会保存一些好的网站地址,以备将来访问。但是,如果收藏机网址太多,选择的时候反而很费劲。这时候,将这些收藏夹导出为一个HTML文件,然后将它设置为浏览器默认首页就成为一个不错的选择。这里,我们用Delphi实现将这个功能。
一、
程序功能分析
1、将IE收藏夹导出为HTML文件,要求不打乱IE收藏夹原来网址的分类和级别关系;
2、将文件导出到Windows的桌面,并将其设置为浏览器默认首页;
二、
程序具体实现
1、取得收藏夹信息,将其转化为HTML代码
收藏夹直接对应于windows目录的Favorites文家夹文件夹,这个文件夹中,每一个子文件夹就是收藏夹中的一个分类,文件夹中的每一个后缀为.URL的文件就是收藏夹的一个收藏。打开一个.名为“
计算机世界报”的.URL文件,其内容如下:
[InternetShortcut]
URL=http://www.ccw.com.cn
原来,“
计算机世界报”的这个收藏的网址就是文件中的URL键值。
现在,我们明白了,要导出收藏夹,只要取得Favorites文件夹的所有文件名和文件中的URL键值就可以了。我们用一个函数来实现:
function Tform1.GetIEFavourites(const favpath: string): TStrings;
var
searchrec: TSearchrec;
str: TStrings;
path, dir, filename: string;
Buffer: array[0..2047] of char;
found: integer;
begin
str := TStringList.Create;
//查找所有URL文件
path := FavPath + ''\*.url'';
dir := ExtractFilepath(path);
found := FindFirst(path, faAnyFile, searchrec);
//如果文件存在
while found = 0 do
begin
SetString(filename, Buffer, GetPrivateProfileString(''InternetShortcut'',
PChar(''URL''), nil, Buffer, SizeOf(Buffer), PChar(dir + searchrec.Name)));
//构造一个收藏的链接,每个
链接加入一个换行控制符
str.Add(''''+copy(searchrec.Name,1,length(searchrec.Name)-4)+''''+''
'');
found := FindNext(searchrec);
end;
found := FindFirst(dir + ''\*.*'', faAnyFile, searchrec);
//如果是文件夹
while found = 0 do
begin
if ((searchrec.Attr and faDirectory) > 0) and (searchrec.Name <> ''.'') then
begin
//在HTML中加入一个换行控制符
str.add(''
'');
str.add(searchrec.name+''
'');
str.AddStrings(GetIEFavourites(dir + ''\'' + searchrec.Name));
end;
found := FindNext(searchrec);
end;
FindClose(searchrec);
Result := str;
end;
在这个函数中,参数favpath是收藏夹的具体路径;函数直接返回一段HTML代码。以上代码中,有两个函数要必须注意:
(1)GetPrivateProfileString函数
功能是取得一个INI文件的键值,在以上代码中,是取得URL键值。函数如下:
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // points to section name
LPCTSTR lpKeyName, // points to key name
LPCTSTR lpDefault, // points to default string
LPTSTR lpReturnedString, // points to destination buffer
DWORD nSize, // size of destination buffer
LPCTSTR lpFileName // points to initialization filename
);
参数解释:
lpAppName:INI文件的“节”,代码中为“InternetShortcut”;
lpKeyName:INI文件lpAppName节中的“键”,代码中为“URL”;
lpReturnedString:默认返回值;
nSize:缓冲大小;
lpFileName:INI文件名,代码中为每一个URL文件;
(2)copy函数
功能是拷贝字符串的一部分,在以上代码中是取得URL文件的文件名,也就是收藏夹中的单个收藏名;函数如下:
function Copy(S; Index, Count: Integer): string;
参数解释:
S:源字符串,代码中为URL文件名(带后缀);
Index:拷贝的开始位置,代码中为S字符串的开始;