Windows-Verzeichnis ermitteln |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
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:
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:
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:
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.