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.