如何从Delphi应用程序中获取Firefox书签?

时间:2009-07-23 21:08:07

标签: delphi firefox sqlite

我知道如何从IE获取收藏,但我如何访问Firefox的书签?

以下是我检索IE收藏夹的代码:

uses
  ShlObj, ActiveX;

function 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;
  // Get all file names in the favourites path
  path  := FavPath + '\*.url';
  dir   := ExtractFilepath(path);
  found := FindFirst(path, faAnyFile, searchrec);
  while found = 0 do
  begin
    // Get now URLs from files in variable files
    Setstring(FileName, Buffer, GetPrivateProfilestring('InternetShortcut',
      PChar('URL'), nil, Buffer, SizeOf(Buffer), PChar(dir + searchrec.Name)));
    str.Add(FileName);
    found := FindNext(searchrec);
  end;
  // find Subfolders
  found := FindFirst(dir + '\*.*', faAnyFile, searchrec);
  while found = 0 do
  begin
    if ((searchrec.Attr and faDirectory) > 0) and (searchrec.Name[1] <> '.') then
      str.Addstrings(GetIEFavourites(dir + '\' + searchrec.Name));
    found := FindNext(searchrec);
  end;
  FindClose(searchrec);
  Result := str;
end;

procedure FreePidl(pidl: PItemIDList);
var
  allocator: IMalloc;
begin
  if Succeeded(SHGetMalloc(allocator)) then
  begin
    allocator.Free(pidl);
    {$IFDEF VER100}
    allocator.Release;
    {$ENDIF}
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  pidl: PItemIDList;
  FavPath: array[0..MAX_PATH] of Char;
begin
  if Succeeded(ShGetSpecialFolderLocation(Handle, CSIDL_FAVORITES, pidl)) then
  begin
    if ShGetPathfromIDList(pidl, FavPath) then
      ListBox1.Items := GetIEFavourites(StrPas(FavPath));
    // The calling application is responsible for freeing the PItemIDList-pointer
    // with the Shell's IMalloc interface
    FreePIDL(pidl);
  end;
end;

感谢。

3 个答案:

答案 0 :(得分:2)

收藏夹保存在配置文件夹中的“places.sqlite”中。它们位于表格 moz_bookmarks 中。它们引用表 moz_places 中的条目及其字段 fk 。获取sqlite作为dll和delphi绑定,如this one

使用 SQLite3_Open 打开数据库并使用 SQLite3_Exec 发送普通的sql语句来访问数据,例如

SELECT * FROM moz_bookmarks;

不幸的是,firefox锁定了places.sqlite,这意味着你必须先复制它(普通文件副本)。处理完副本后,您可以将其删除。

答案 1 :(得分:1)

来自MetaProduct的TBookmarks组件......它的价格是75.00美元: http://www.metaproducts.com/mp/TBookmarks_component.htm

引用他们的网站:

Borland Delphi 2,3,4,5,6,7,2005,2006,2007,2009。

新!支持FireFox 3,Safari和Google Chrome书签!

MetaProducts TBookmarks是一个Delphi 2 - 7,2005-2009组件,可帮助您显示MS Internet Explorer收藏夹(4.0 - 8.0,)MSN Explorer,Opera Hotlists(3.0 - 9.0)和Netscape,Safari,Chrome,FireFox和菜单中的Mozilla书签(2.0 - 8.0)。

只需将TBookmarks组件放在表单上,​​然后分配其Menu属性和OnURL事件即可。将Enabled设置为True可收集指定TMenuItem中的所有书签信息。

您还可以使用TTreeView组件使TBookmarks自动填充条目。

答案 2 :(得分:0)

好吧,Firefox书签是存储在的HTML文件 <WindowsUserPath&gt; \ Application Data \ Mozilla \ Firefox \ Profiles \ SinanÜnür说,<aRamdonProfileName&gt; \ bookmark.htm。

所以你需要获取mozilla配置文件目录并检索文件夹 在那里的名字。

之后你需要解析html文件.....

所以AFAIK,不,没有API直接获取FF书签。