用Delphi将IE收藏夹导出为HTML文件

时间:2006/7/19 6:33:28

作者:佚名

人气:456

上网时间长了,总会保存一些好的网站地址,以备将来访问。但是,如果收藏机网址太多,选择的时候反而很费劲。这时候,将这些收藏夹导出为一个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[1] <> '.') 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字符串的开始;

Count:要拷贝的字符串个数,代码中为URL文件名长减4,目的是去掉URL文件名的后缀“.URL”;

2、取得的信息保存为HTML文件,并将其设为浏览器首页

为了便于理解,程序中首先将取得的收藏夹信息导入到一个Richedit中,然后加入HTML文件的头尾信息(可以不要)。这样做还有一个好处是可以用户可以直接修改要生成文件的HTML源代码。

导入Richedit的程序代码如下:

procedure TForm1.Button1Click(Sender: TObject);

var

pidl: PItemIDList;

FavPath: array[0..MAX_PATH] of char;

begin

SHGetSpecialFolderLocation(Handle, CSIDL_FAVORITES, pidl);

SHGetPathFromIDList(pidl, favpath);

//加入HTML文件头信息

memo1.Lines.Add('');

memo1.Lines.Add('');

memo1.Lines.Add('');

memo1.Lines.Add('

我的收藏夹

');

memo1.Lines.Add('

--------------------------------------------------------------------------------

');

//取得收藏夹信息

memo1.Lines.add(GetIEFavourites(StrPas(FavPath)).gettext);

//加入HTML文件尾信息

memo1.Lines.Add('');

button2.Enabled:=true;

showmessage('代码生成完成!');

end;

在以上代码中,有两个函数要注意:

(1)SHGetSpecialFolderLocation

此函数的功能是取得系统特定目录的路径;函数如下:

WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation(;

HWND hwndOwner,

int nFolder,

LPITEMIDLIST *ppidl

);

参数解释:

hwndOwner:HWND信息;

nFolder:需要取得的路径的代码,程序中为CSIDL_FAVORITES收藏夹路径;

*ppidl:路径保存指针;

(2)SHGetPathFromIDList

此函数从指针取得路径信息;函数如下:

WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(

LPCITEMIDLIST pidl,

LPSTR pszPath

);

参数解释:

pidl:指针信息,程序中从SHGetSpecialFolderLocation取得;

pszPath:路径保存字符串,程序中为favpath;

3、导出文件,并设置其为浏览器首页

procedure TForm1.Button2Click(Sender: TObject);

var

Reg: TRegistry;

deskpath:string;

begin

//取得桌面路径

Reg := TRegistry.Create;

try

Reg.RootKey := HKEY_CURRENT_USER;

if Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', false) then

deskpath:=Reg.readString('Desktop');

finally

Reg.CloseKey;

Reg.Free;

inherited;

end;

//设为首页

Reg := TRegistry.Create;

try

Reg.RootKey := HKEY_CURRENT_USER;

if Reg.OpenKey('Software\Microsoft\Internet Explorer\Main', false) then

Reg.writeString('Start Page',deskpath+'\我的收藏夹.htm');

finally

Reg.CloseKey;

Reg.Free;

inherited;

end;

//将文件导出到桌面

memo1.Lines.SaveToFile(deskpath+'\我的收藏夹.htm');

showmessage('文件导出完成!');

end;

以上代码从注册表获得Windows桌面路径,然后输出文件,并将此文件设置为浏览器首页。设置为浏览器首页的实现就是修改注册表:“HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main”中的键值“Start Page”就可以了。

三、总结与启示

看了以上代码,我们可以得到一些编程思路如:遍历文件,读写注册表等。如果仔细想想,我们还可以发现怎样将一个网址直接加入收藏夹的思路!

完全源代码:

unit UFav2HTML;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls,ShlObj,shellapi,Registry;

type

TForm1 = class(TForm)

Button1: TButton;

Memo1: TMemo;

Button2: TButton;

procedure Button1Click(Sender: TObject);

function GetIEFavourites(const favpath: string): TStrings;

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

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;

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[1] <> '.') then

begin

str.add('

');

str.add(searchrec.name+'

');

str.AddStrings(GetIEFavourites(dir + '\' + searchrec.Name));

end;

found := FindNext(searchrec);

end;

FindClose(searchrec);

Result := str;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

pidl: PItemIDList;

FavPath: array[0..MAX_PATH] of char;

begin

SHGetSpecialFolderLocation(Handle, CSIDL_FAVORITES, pidl);

SHGetPathFromIDList(pidl, favpath);

memo1.Lines.Add('');

memo1.Lines.Add('');

memo1.Lines.Add('');

memo1.Lines.Add('我的收藏夹');

memo1.Lines.Add('--------------------------------------------------------------------------------');

memo1.Lines.add(GetIEFavourites(StrPas(FavPath)).gettext);

memo1.Lines.Add('');

button2.Enabled:=true;

showmessage('代码生成完成!');

end;

procedure TForm1.Button2Click(Sender: TObject);

var

Reg: TRegistry;

deskpath:string;

begin

//取得桌面路径

Reg := TRegistry.Create;

try

Reg.RootKey := HKEY_CURRENT_USER;

if Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', false) then

deskpath:=Reg.readString('Desktop');

finally

Reg.CloseKey;

Reg.Free;

inherited;

end;

//设为首页

Reg := TRegistry.Create;

try

Reg.RootKey := HKEY_CURRENT_USER;

if Reg.OpenKey('Software\Microsoft\Internet Explorer\Main', false) then

Reg.writeString('Start Page',deskpath+'\我的收藏夹.htm');

finally

Reg.CloseKey;

Reg.Free;

inherited;

end;

memo1.Lines.SaveToFile(deskpath+'\我的收藏夹.htm');

showmessage('文件导出完成!');

end;

end.

怎么把收藏夹变成html文件,用Delphi将IE收藏夹导出为HTML文件相关推荐

  1. delphi html转pdf文件,用Delphi将IE收藏夹导出为HTML文件_Delphi

    上网时间长了,总会保存一些好的网站地址,以备将来访问.但是,如果收藏机网址太多,选择的时候反而很费劲.这时候,将这些收藏夹导出为一个html文件,然后将它设置为浏览器默认首页就成为一个不错的选择.这里 ...

  2. 文件转换-用于性能测试(将postman导出的.json文件转为jmeter可识别的.jmx文件)

    步骤: 1.环境要求(二选一): ①本地配置java开发环境,参考:Java 开发环境配置 | 菜鸟教程 ②若不想配置java开发环境,需要有java的运行环境:jre,下载配置参考:https:// ...

  3. 微页导出为html文件怎么打开吗,h5自动生成工具(示例代码)

    一.前言 写了很多h5之后,对于写手写html和css已经麻木的我决定动手写个工具自动生成h5结构和样式.其实这个想法由来已久,但总是觉得自己技术不够,所以一直没实行.直到某天我真的写够了,我决定动手 ...

  4. python字典保存为excel_python将字典列表导出为Excel文件的方法

    将如下的字典列表内容导出为Excel表格文件形式: ​ python将字典列表导出为Excel文件的方法,如下所示: 1.安装python官方Excel库------xlwt 直接在终端进行安装即可: ...

  5. python列表导出excel_python将字典列表导出为Excel文件的方法

    将如下的字典列表内容导出为Excel表格文件形式: python将字典列表导出为Excel文件的方法,如下所示: 1.安装python官方Excel库------xlwt 直接在终端进行安装即可:pi ...

  6. 报表如何批量导出成 excel 文件

    需求说明 报表展现后可以通过工具栏中的导出按钮将当前展现的报表导出成 excel 文件,但是在实际使用中通常会要求报表不需要展现,直接通过一些操作将报表导出成 excel 文件,并且往往会要求批量导出 ...

  7. 微信收藏的html文件在哪里,微信如何收藏文件?微信收藏的文件在手机哪个文件夹?...

    现在的手机微信有很多的小作用,十分的便捷好用,可是许多 作用大家都不清楚,今日,网我就来来教大家怎么使用手机微信的"我的收藏"作用.这一作用十分好用,并且收藏的源文件删掉的话,大家 ...

  8. 怎样从浏览器保存html文件在哪里,电脑浏览器收藏夹保存在哪里

    使用浏览器进行浏览,总会保存一下自己喜欢或者必要的网站收藏,那么你知道浏览器收藏夹保存在哪里吗?下面为您精心推荐了,希望对您有所帮助. 进入系统桌面,找到计算机图标一般计算机图标都在左上角. 双击计算 ...

  9. 微信收藏夹文件保存在服务器安全吗,手机收藏的文件在哪里(微信收藏夹的文件路径)...

    手机微信时常有好友分享的一些有意思的小视频,现在想把这些小视频批量发送到电脑或者分享到网盘上.那么我们首先要清楚微信中的小视频储存的文件夹. 下面我以安卓系统的智能手机为例,进入手机桌面,点击&quo ...

最新文章

  1. mysql 工程师必备命令_mysql入门命令语句
  2. 全网最详细 TCP 参数讲解,不用担心没有面试机会
  3. 025_html表格
  4. JavaScript进阶3-学习笔记
  5. .NET 6 Preview 4 已发布,ASP.NET Core 更新内容
  6. 如何将idea自带的maven添加到环境变量
  7. winform 判断控件有没有被遮挡_编程入门基础之 winform(2)
  8. Spring+SpringMVC+maven使用@aspectJ添加切面
  9. 命令行获取本地安全策略
  10. Debian——roundcube报错及解决方法
  11. 单板电源设计(LDO、DC/DC)
  12. Push failed Remote: Support for password authentication was removed on August 13, 2021.
  13. Storm概念详解和工作原理,topology、spout、bolt的细节和API讲解之一
  14. 【金猿人物展】龙盈智达首席数据科学家王彦博:量子科技为AI大数据创新发展注入新动能...
  15. python视频人脸检测_OpenCV + python 实现人脸检测(基于照片和视频进行检测)
  16. OpenCV实验(7):人脸面部识别
  17. [JZOJ 5804] 简单的序列
  18. 如何快速办理软件著作权?
  19. 计算机开关电源基本原理,开关电源基本原理与设计介绍——第一讲
  20. 显示器接口:VGA、HDMI、DVI 、DisplayPort

热门文章

  1. 阿里云短信api发送异常
  2. 小程序发送模板消息form_id的获取
  3. 前端算法及手写算法JavaScript
  4. FreeRTOS学习笔记【二】——FreeRTOS 移植
  5. 手抛飞机大改装(4种机型,7种改法)干货!!
  6. Mysql 时间格式化 DATE_FORMAT使用
  7. Flink(Pometheus监控)
  8. 点焊机器人焊接超时_机器人点焊自动化 I 附机器人点焊焊接工艺
  9. C/C++——vector的基本操作总结
  10. OpenCL与OpenACC的安装