Delphi - Speciális mappák elérési útvonalainak lekérdezése a Windows Shell-től

forráskód letöltése
A Windows speciális könyvtárainak lekérdezésére számtalan módszer létezik. Mostani cikkünkben egyenesen a Windows Shell-től kérdezzük le ezeket az elérési útvonalakat. >Megoldáshoz a SHGetSpecialFolderLocation függvényt használjuk. Itt első paraméterként az ablakunk azonosítóját kell megadnunk. A másodikként egy konstanst, mely meghatározza, hogy melyik könyvtár elérési útvonalára vagyunk kíváncsiak. Harmadik paraméter egy ItemIDList típusú mutató, melybe visszakapjuk az lekérdezett értékeket. Ebből az elérési útvonalat az SHGetPathFromIdList függvénnyel kérdezhetjük le egy karaktertömbbe null terminált sztringként. Végül pedig fel kell szabadítanunk a SHGetSpecialFolderLocation által lefoglalt memória területet, melyre a pidl változó mutat.
function TForm1.GetFolderPath: string;
var
  pidl: PItemIDList;
  buffer: array[0..MAX_PATH] of char;
  malloc: IMalloc;
begin
  SHGetSpecialFolderLocation(Handle, CSIDL_FONTS, pidl);
  SHGetPathFromIdList(pidl, PChar(@buffer));
  result:=buffer;
  if pidl<>nil then begin
    SHGetMalloc(malloc);
    malloc.Free(pidl);
  end;
end;