Mit ShGetSpecialFolderLocation sieht das so aus:
Delphi-Quellcode:
function getSpecialFolder(const aFolder: Integer): string;
var
ItemIDList: PItemIDList;
hPath: PChar;
ShellH: IMalloc;
begin
if SUCCEEDED(ShGetSpecialFolderLocation(Application.Handle, aFolder, ItemIDList)) then
begin
try
hPath := StrAlloc(MAX_PATH);
try
if SHGetPathFromIDList(ItemIDList, hPath) then
Result := hPath;
finally
StrDispose(hPath);
end;
finally
if SHGetMalloc(ShellH) = NOERROR then
ShellH.Free(ItemIDList);
end;
end;
end;
Den Code habe ich mal vor Jahren irgendwo gefunden, weiß aber nicht mehr woher.
Ich aber auch
GetEnvironmentVariable('AppData');
bevorzugen.
Die erste Variante benötigt auf meinem System bei einer Wiederholung von 100.000 im Durchschnitt 1700ms.
Letztere Variante benötigt mit derselben Schleife im Durchschnitt für 10.000 Durchgänge 33ms.
Niemand wird 100.000 Mal hintereinander diese Funktion aufrufen. Aber jetzt weiß man wenigstens, welche schneller ist