Home » Tipps & Tricks » Dateien/Verzeichnisse » Verzeichnisse » Windows-Verzeichnis ermitteln

Windows-Verzeichnis ermitteln

In diesem Artikel wird gezeigt, wie man auf verschiedene Weisen das Windows-Verzeichnis ermitteln kann.
Als bevorzugte Lösung sollte die entsprechende API-Funktion verwendet werden:

function GetWinDir: string;
var
  Dir: string;
  Len: DWord;
begin
  SetLength(Dir,MAX_PATH);
  Len:=GetWindowsDirectory(PChar(Dir),MAX_PATH);
  if Len>0 then
  begin
    SetLength(Dir,Len);
    Result:=Dir;
  end
  else
    RaiseLastOSError;
end;

RaiseLastOSError ist erst ab Delphi 6 verfügbar. Programmierer, die mit älteren Versionen arbeiten müssen an dieser Stelle RaiseLastWin32Error verwenden.

Des Weiteren gibt es die Möglichkeit das Windows-Verzeichnis über eine Umgebungsvariable auszulesen:

function GetWinDir: string;
begin
  result := SysUtils.GetEnvironmentVariable('windir');
end;

Die entsprechende Umgebungsvariable heißt ‚windir‘. Eine Liste weiterer Umgebungsvariablen finden Sie in der PSDK unter dem Eintrag ‚environments, Environment property‘.

Da die o.g. Funktion erst ab Delphi 6 in der Unit SysUtils gekapselt ist, müssen Besitzer älterer Versionen direkt auf die API zurückgreifen:

function GetWinDir: string;
var
  lSize: Integer;
  buffer: string;
begin
  lSize:=Windows.GetEnvironmentVariable('windir','',0);
  if lSize>0 then
  begin
    SetLength(buffer,lSize);
    Windows.GetEnvironmentVariable('windir',PChar(buffer),lSize) ;
    Result:=Buffer;
  end
  else
    RaiseLastOSError;
end;

In verschiedenen FAQs findet man immer wieder Lösungen, wo dem Programmierer gezeigt wird, wie man das Windows-Verzeichnis über die Registry ermitteln kann. Von dieser Vorgehensweise wird generell abgeraten, da sich die Positionen in der Registry mit jeder Windows-Version ändern können.