Entwickler-Ecke

Dateizugriff - Systemvariable "TEMP" auflösen


AScomp - Fr 08.01.16 20:52
Titel: Systemvariable "TEMP" auflösen
Hallo,

bin gerade etwas verblüfft, dass ich nach fast 30-minütiger Suche keine Funktion finden kann, mit der man die Systemvariable "TEMP" auflösen kann.

Zur Erklärung: Ich möchte den Temp-Ordner des Systems ermitteln (NICHT den des Benutzers, siehe Anhang). Standardmäßig liegt der unter "C:\Windows\Temp\", aber über die Umgebungsvariablen kann das jeder Benutzer anpassen.

Mit


Delphi-Quelltext
1:
ExpandEnvironmentStrings(PChar('%temp%'), PChar(result), MAX_PATH);                    


kann ich die Umgebungsvariable des Benutzers auslesen, aber eben NICHT die Systemvariable.

Hat da jemand eine Idee?

Danke und viele Grüße

Andy


Delete - Sa 09.01.16 00:21


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
function ExpandEnvStr(const szInput: string): string;
const MAXSIZE = 32768;
begin
  SetLength(Result,MAXSIZE);
  SetLength(Result,ExpandEnvironmentStrings(pchar(szInput),
  @Result[1],length(Result))-1);
end;

procedure TForm1.ButtonClick(Sender: TObject);
var s : String;
begin
with TRegistry.Create(KEY_READ) do
  try
    RootKey :=  HKEY_LOCAL_MACHINE;
    if OpenKey('SYSTEM\CurrentControlSet\Control\Session Manager\Environment\', False) then
    begin
      if ValueExists('Temp'then
      begin
          s:=  ReadString('Temp');
          Memo1.Lines.Add(ExpandEnvStr(s));
      end;
    end;
  finally
    CloseKey;
    Free;
  end;
end;


AScomp - Sa 09.01.16 01:13

Hallo,

danke dir - den Weg über die Registry hatte ich mir auch bereits überlegt, ging aber stark davon aus, dass es dafür eine API geben müsste.

In jedem Fall, ganz herzlichen Dank!

Gruß

Andy


Delete - Sa 09.01.16 17:35

(KEY_READ) noch hinzugefügt, sonst braucht man Admin-Rechte...