Archive

Posts Tagged ‘folder’

How to Get the Windows Directory

December 15th, 1999 m3Rlin No comments

To found out the name of the Windows directory it’s best to use the Windows API GetWindowsDirectory() function.

Here’s the Delphi implementation:

uses Windows;
...
function GetWindowsDir: string;
const
(* The length of the directory buffer. Usually 64 or even 16 is enough :-)
**
** Must be DWORD type.
*)
  dwLength: DWORD = 255;
var
  pcWinDir: PChar;
begin
  GetMem(pcWinDir, dwLength);
  GetWindowsDirectory(pcWinDir, dwLength);
  Result := string(pcWinDir);
  FreeMem(pcWinDir, dwLength);
end;

How do I Get Internet Explorer’s Favorites

December 15th, 1999 m3Rlin No comments

Accessing Internet Explorer favorites is not hard since they are nothing more than files and folders. All you have to basically do is find the IE Favorites folder, then read it’s structure and file list. Once this is done you will need to read the URL that’s in each of the files. Sounds easy? You can always use the code below… ;->

function GetIEFavorites(const Path: string): TStrings;
var
  Buffer: array[0..2047] of Char;
  iFound: Integer;
  Dir, FileName, Path: string;
  SearchRec: TSearchRec;
  Links: TStrings;
begin
  Links := TStringList.Create;
  // Get all file names in the favourites path
  Path  := FavPath + '*.url';
  Dir   := ExtractFilepath(Path);
  iFound := FindFirst(Path, faAnyFile, searchrec);
  while iFound = 0 do begin
    // Get now URLs from files
    Setstring(FileName, Buffer, GetPrivateProfilestring('InternetShortcut',
      PChar('URL'), nil, Buffer, SizeOf(Buffer), PChar(Dir + SearchRec.Name)));
    Links.Add(FileName);
    iFound := FindNext(SearchRec);
  end;
  // Find subfolders
  iFound := FindFirst(Dir + '*.*', faAnyFile, searchrec);
  while iFound = 0 do begin
    if ((SearchRec.Attr and faDirectory) > 0) and (SearchRec.Name[1] <> '.') then
      Links.Addstrings(GetIEFavorites(dir + '' + SearchRec.Name));
    iFound := FindNext(searchrec);
  end;
  FindClose(SearchRec);
  Result := Links;
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;
...
var
  FavPath: array[0..MAX_PATH] of Char;
  pIDL   : PItemIDList;
begin
  if Succeeded(ShGetSpecialFolderLocation(Handle, CSIDL_FAVORITES, pIDL)) then begin
    if ShGetPathfromIDList(pIDL, FavPath) then
      ListBox1.Items := GetIEFavourites(StrPas(FavPath));
    // We are responsible for freeing the PItemIDList pointer with the
    // Shell's IMalloc interface
    FreePIDL(pIDL);
  end;
end;