Function getFolder (AROOT: Integer; Acaption: String): String;
VAR
PPROGRAMS, PBROWSE: PITEMIDLIST
HBROWSEINFO: TBROWSEINFO;
HPCHAR: PCHAR;
Begin
IF (NOT SUCCEEDED (SHGETSPECIALFOLDERLOCATION (GetActiveWindow, Aroot, Pprograms)).
EXIT;
Hpchar: = stralloc (max_path);
With hbrowseinfo do
Begin
Hwndowner: = getActiveWindow;
PIDLROOT: = PPROGRAMS;
PszdisplayName: = hpchar;
Lpsztitle: = pchar (acAption);
Ulflags: = Bif_Returnonlyfsdirs;
LPFN: = NIL;
LPARAM: = 0;
END;
PBROWSE: = shbrowseForfolder (HBrowseInfo);
IF (PBROWSE <> NIL) THEN
IF (SHGETPATHFROMIDLIST (PBROWSE, HPCHAR)) THEN
Result: = hpchar;
STRDispose (hpchar);
END;
// Call this function
VAR
Strfolder: string;
Begin
Strfolder: = getFolder (CSIDL_DRIVES, 'SELECT Folder');
ShowMessage (Strfolder);
END;