Mit Hilfe der Funktion
GetEnvironmentVariable und der Procedure
SetEnvironmentVariable kann man Umgebungsvariablen lesen bzw. setzen. Allerdings sind diese Umgebungsvariablen nur innerhalb der eigenen Anwendung gültig.
Allerdings gibt es auch die Möglichkeit systemweit Umgebungsvariablen zu benutzen. Unter Windows 2000 findet man die systemweiten Umgebungsvariablen unter Systemeingeschaften -> Erweitert -> Umgebungsvariablen. Außerdem gibt es eine Unterteilung zwischen Benutzer- und Systemvariablen. Beide Typen von Variablen findet man in der Registry wieder:
Benutzervariablen: HKEY_CURRENT_USER\Environment
Systemvariablen: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Es folgt nun eine Funktion um systemweite Umgebungsvariablen zu lesen und eine Procedure um diese zu schreiben.
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: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55:
| Uses Registry;
Type tEnviromentOwner = (eoUser, eoSystem);
Const cEnviromentOwnerRegPlace : Array [tEnviromentOwner] of Record Root: HKEY; Key: String End = ( (Root: HKEY_CURRENT_USER; Key: 'Environment'), (Root: HKEY_LOCAL_MACHINE; Key: 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment') );
Function GetSystemWideEnvironmentVariable (aOwner: tEnviromentOwner; aName: String): String; Var Reg: TRegistry; begin Reg := TRegistry.Create;
With Reg, cEnviromentOwnerRegPlace [aOwner] Do Try RootKey := Root; OpenKey (Key, False); Result := ReadString (aName); Finally Free; End; end;
procedure SetSystemWideEnvironmentVariable (aOwner: tEnviromentOwner; aName, aValue: String); Var dwResult: DWORD; Reg: TRegistry; Begin Reg := TRegistry.Create;
With Reg, cEnviromentOwnerRegPlace [aOwner] Do Try RootKey := Root; OpenKey (Key, False); WriteExpandString (aName, aValue);
SendMessageTimeout ( HWND_BROADCAST, WM_SETTINGCHANGE, 0, lParam (pChar ('Environment')), SMTO_ABORTIFHUNG, 5000, dwResult ); Finally Free End; End; |
Aufgerufen werden diese z. B. wie folgt:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin Caption := GetSystemWideEnvironmentVariable (eoSystem, 'OS'); end; |
Siehe auch:
...Umgebungsvariable in einem String auflösen?