Home » Tipps & Tricks » System » Systemfunktionen » Favoriten auslesen

Favoriten auslesen

Gibt es eine Möglichkeit, die Favoriten mit Name und Url in einem ListView darzustellen?Ja, das geht mit folgender Methode.Bemerke: Das ListView muss 2 Spalten haben. Am Besten stellst du die Eigenschaft ViewStyle auf vsReport, damit die Spalten auch zu sehen sind.

uses inifiles, shlobj;

procedure GetFavUrls(UrlList: TListItems);

  function GetFavPath: string;
  var
    FavPath: Array[0..MAX_PATH] of Char;
    FavItem: PItemIdList;
  begin
    SHGetSpecialFolderLocation(Form1.Handle, CSIDL_FAVORITES , FavItem);
    SHGetPathFromIDList(FavItem, FavPath);
    result := FavPath;
  end;

  function GetUrl(s: string): string;
  var
    ini: TInifile;
  begin
    ini := TIniFile.create(s);
    try
      result := ini.ReadString('InternetShortcut', 'URL', '');
    finally
      ini.free;
    end;
  end;

  procedure GetFavUrlPath(Folder: String);
  var
    SR: TSearchRec;
  begin
    if Folder[length(Folder)] <> '' then
      Folder := Folder + '';
    if FindFirst(Folder + '*.Url', faAnyFile or faDirectory, SR) = 0 then
      try
        repeat
          if (SR.Name  '.') and (SR.Name  '..') and (SR.Attr  faDirectory) then
            with UrlList.add do
            begin
              Caption := (copy(SR.name,1,pos('.url',Sr.Name) - 1));
              SubItems.add(GetUrl(Folder + Sr.Name));
            end;
        until FindNext (SR)  0;
      finally
        FindClose(SR);
      end;
      if FindFirst(Folder + '*.*', faDirectory, SR) = 0 then
        try
          repeat
            if (SR.Name  '.') and (SR.Name  '..') and (SR.Attr = faDirectory) then
              GetFavUrlPath(Folder + SR.Name);
          until FindNext (SR)  0;
        finally
          FindClose(SR);
        end; 
  end;

begin
  GetFavUrlPath(GetFavPath);
end;

Der Aufruf erfolgt dann so:

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetFavUrls(ListView1.Items);
end;