function SpecialFolderPath(H: hWnd; W: Integer): String; var T: PItemIDList; C: PChar; begin Result := ''; New(C); // A nice API to get a list of all special locations into a PItemIDList SHGetSpecialFolderLocation(H, W, T); // Some memory for our pchar GetMem(C, 512); // Get the wanted path SHGetPathFromIDList(T, C); Result := C; // We don't want to waste resources FreeMem(C); end; This requires a fancy unit named ShlObj.pas, found in Delphi's Source\Rtl\Win\ folder. The list of possible second parameters for this are: CODECSIDL_BITBUCKET - Recycle bin (can only be found with the above API) CSIDL_CONTROLS - Control panel (Virtual folder) CSIDL_DESKTOP - Windows desktop (Virtual folder) CSIDL_DESKTOPDIRECTORY - Physical object storage of current desktop CSIDL_DRIVES - My Computer (Virtual folder) CSIDL_FONTS - Fonts folder CSIDL_NETWORK - Network Neighborhood (Virtual folder) CSIDL_PERSONAL - Personal documents folder CSIDL_PRINTERS - Installed printers (Virtual folder) CSIDL_PROGRAMS - Program groups CSIDL_RECENT - Recent documents link folder CSIDL_SENDTO - "Send To:"-menu item folder CSIDL_STARTMENU - Start menu items group folder CSIDL_STARTUP - "Startup" program group folder CSIDL_TEMPLATES - Document template dir There's also one named CSIDL_NETHOOD, I'm not sure what it is. Example call of the above function: CODEprocedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text := SpecialFolderPath(Form1.Handle, CSIDL_FONTS); end; Note that some of the directories may not exist in all Windows® versions. Have fun. This post has been edited by prevex: Apr 25 2005, 07:01 PM