Olá galera,

Vamos falar neste QUICK TIPS, como pegar os Favoritos do IE. Como todos sabem e possível salvar nos navegadores os link das sites que você acha interessante como favoritos. Bem o que muita gente talvez não saiba e que você pode recuperar este lista através do Delphi. O mais legal é que a API do Windows, que não é pequena já nos fornece um mecanismo para isso.

Dê uses em ShlObj;

Declare a seguinte Function

function GetIEFavoritos(const favpath: string):TStrings;
var
  searchrec:TSearchrec;
  S:TStrings;
  path,dir,filename:String;
  Buffer: array[0..2047] of Char;
  found:Integer;
begin
  S:=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)));
    S.Add(filename);
    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
    S.AddStrings(GetIEFavoritos(dir+'\'+searchrec.name));
    found:=FindNext(searchrec);
  end;
  FindClose(searchrec);
  Result:=S;
end;

A variável 
searchrec  é um TSearchRec que é uma classe do Delphi para ler todos os arquivos a partir de uma determinada máscara. Serve basicamente para fazer buscas atrás de um arquivo qualquer. Já faAnyFile é a constante usada pelo Windows para definir que o que você está procurando... existem outras como faDirectory, aArchive , etc.

O retorno de FindFirst/FindNext é 0 quando um arquivo é encontrado. Caso contrário, o retorno é uma mensagem de erro. TSearchRec pode retornar também diretórios, se você quiser fazer uma busca incluindo sub-diretórios.


No Clique de um botão, por exemplo, coloque o código abaixo

var pidl: PItemIDList;
   FavPath: array[0..MAX_PATH] of char;
begin
  SHGetSpecialFolderLocation(Handle, CSIDL_FAVORITES, pidl);
  SHGetPathFromIDList(pidl, favpath);
  ListBox1.Items:= GetIEFavoritos (StrPas(FavPath));
End;

Até a próxima.

Wesley Y