procedure GetEnvironmentStrings(ss:TStrings);
 {Получение переменных среды}
 var
 ptr: PChar;
 s: string;
 Done: boolean;
 begin
 ss.Clear;
 s:='';
 Done:=FALSE;
 ptr:=windows.GetEnvironmentStrings;
 while Done=false do begin
  if ptr^=#0 then begin
  inc(ptr);
  if ptr^=#0 then Done:=TRUE
  else ss.Add(s);
  s:=ptr^;
  end else s:=s+ptr^;
  inc(ptr);
 end;
end;
 
 
Function GetTempDir : string;
var EnvStrings : TStringList;
    i : integer;
    s : string;
begin
    EnvStrings := TStringList.Create;
    GetEnvironmentStrings(EnvStrings);
 
    Result := EmptyStr;
 
    for i := 0 to EnvStrings.Count - 1 do begin
        s := trim(EnvStrings[i]);
        if copy(s, 1, 5) = 'TEMP=' then begin
            Result := copy(s, 6, 255);
            Break;
        end;
    end;
 
    EnvStrings.Free;
 
end;