Autor Beitrag
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 12.11.03 16:05 
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.
ausblenden volle Höhe 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:
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:
ausblenden 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?