DelphiFAQ Home Search:
General :: Windows :: Programming :: Windows with Delphi :: Windows Filesystem
File related questions and answers. File operations, attributes, system dialogs, hard disk handling.

Articles:

This list is sorted by recent document popularity (not total page views).
New documents will first appear at the bottom.

Only the 40 most recently viewed articles are shown.
You can see the full list here.

Featured Article

Browsing through Windows folders

The two key functions to browse through those virtual Windows folders are

SHGetSpecialFolderLocation();
and
SHGetPathFromIDList()

They can be used as shown in the sample code. You may replace the CSIDL_PROGRAMS constant with another one from the list in the comment below.

uses ShlObj,ActiveX;
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
   BI: TBrowseInfo;
   Buf: PChar;
   Dir,
   Root: PItemIDList;
   Alloc: IMalloc;
 begin
   SHGetMalloc(Alloc);
   Buf := Alloc.Alloc(Max_Path);
 
   // CSIDL_BITBUCKET  RecycleBin
   // CSIDL_CONTROLS   ControlPanel
   // CSIDL_DESKTOP    Desktop
   // CSIDL_DRIVES     My Computer
   // CSIDL_FONTS      Fonts
   // CSIDL_NETHOOD    Network Neighborhood
   // CSIDL_NETWORK    The virtual version of the above
   // CSIDL_PERSONAL   'Personal'
   // CSIDL_PRINTERS   printers
   // CSIDL_PROGRAMS   Programs in the Start Menu
   // CSIDL_RECENT     Recent Documents
   // CSIDL_SENDTO     Folder SendTo
   // CSIDL_STARTMENU  The whole Start menu
   // CSIDL_STARTUP    The Autostart Group
   // CSIDL_TEMPLATES  Document templates
 
   // use of the constants above
   SHGetSpecialFolderLocation(Handle, CSIDL_PROGRAMS, Root);
 
   with BI do
   begin
     hwndOwner := Form1.Handle;
     // NIL means show all
     pidlRoot := Root;
     pszDisplayName := Buf;
     lpszTitle := 'Choose Folder';
     ulFlags := 0;
     lpfn := nil;
   end;
 
   try
     Dir := SHBrowseForFolder(BI);
     if Dir<>nil then
     begin
       SHGetPathFromIDList(Dir, Buf);
       ShowMessage(Buf);
       Alloc.Free(Dir);
     end;
   finally
     Alloc.Free(Root);
     Alloc.Free(Buf);
   end;
 end;
You don't like the formatting? Check out SourceCoder then!
Generated 12:02:15 on May 26, 2018