Die anderen Programme müssen von den Änderugen erfahren - Stichwort: BROADCAST.
Vielleicht hilft Dir der folgende Code "auf die Sprünge".
Delphi-Quellcode:
function SetGlobalEnvironment(const Name, Value: string;
const User: Boolean = True): Boolean;
resourcestring
REG_MACHINE_LOCATION = 'System\CurrentControlSet\Control\Session Manager\Environment';
REG_USER_LOCATION = 'Environment';
begin
with TRegistry.Create do
try
if User then { User Environment Variable }
Result := OpenKey(REG_USER_LOCATION, True)
else { System Environment Variable }
begin
RootKey := HKEY_LOCAL_MACHINE;
Result := OpenKey(REG_MACHINE_LOCATION, True);
end;
if Result then
begin
WriteString(Name, Value); { Write Registry for Global Environment }
{ Update Current Process Environment Variable }
SetEnvironmentVariable(PChar(Name), PChar(Value));
{ Send Message To All Top Window for Refresh }
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
end;
finally
Free;
end;
end;
EDIT:
Sorry, sehe gerade, dass der Code in einem Deiner Links auch auftaucht...
Vielleicht solltest Du Deinen Code mal veröffentlichen - kann ja sein, dass andere Programme nicht "richtig aufgeklärt" werden über die Änderungen.