Ansonsten für die direkten Fragen:
1.
GetEnvironmentVariable()
2. Wegen dem abschließendem Backslash:
IncludeTrailingPathDelimiter() bzw.
ExcludeTrailingPathDelimiter()
Nutze aber für 1. lieber diese abgeänderte Version von DeddyH's gelieferte Lösung_
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
SetLength(s, MAX_PATH);
SetLength(s, GetTempPath(MAX_PATH - 1, PChar(s)));
ShowMessage(s);
end;
@DeddyH: Warum nochmal Length() wenn du weißt wie lang (als Konstante vorliegen)? Und StrLen() kostet neben der temporären PChar Konvertierung nochmals mehr Zeit, dabei liefert GetTempPath() die Anzahl der eingetragenen Zeichen zurück.