Ich nutze überhaupt nicht die Environment-Variablen, sondern die
API-Funktion SHGetSpecialFolderLocation.
Meine Funktion sieht so aus (irgendwo mal aus dem Internet gefischt und angepasst):
Delphi-Quellcode:
function GetSpecialPath(aCSIDL : Integer) : String;
var
shellMalloc: IMalloc;
ppidl: PItemIdList;
begin
ppidl := nil;
try
if SHGetMalloc(shellMalloc) = NOERROR then
begin
SHGetSpecialFolderLocation(Application.Handle, aCSIDL, ppidl);
SetLength(Result, MAX_PATH);
if not SHGetPathFromIDList(ppidl, PChar(Result)) then
begin
Result := '';
end
else
begin
SetLength(Result, lStrLen(PChar(Result)));
end;
end;
finally
if ppidl <> nil then
begin
shellMalloc.free(ppidl);
end;
end;
end;
Eine Liste der CSIDL-Werte ist hier zu finden:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
In deinem Fall müsste es wohl CSIDL_PROFILE sein.