unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Registry;
type
TfrmMain = class(TForm)
btn1: TButton;
edt1: TEdit;
lbl1: TLabel;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
function ExpandEnvironment(const strValue: string): string;
function SetGlobalEnvironment(const envName, envValue: string; const isUser: Boolean = True): Boolean;
implementation
{$R *.dfm}
procedure TfrmMain.btn1Click(Sender: TObject);
var
path:string;
begin
SetGlobalEnvironment('JAVA_HOME',edt1.Text);
SetGlobalEnvironment('CLASSPATH','.;%JAVA_HOME%/jre/lib/rt.jar;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib;');
path := ExpandEnvironment('%PATH%');
path := path + ';%JAVA_HOME%/bin';
SetGlobalEnvironment('PATH',path);
end;
///
/// 设置系统级环境变量参数函数
///
///
function SetGlobalEnvironment(const envName, envValue: string; const isUser: Boolean = True): Boolean;
resourcestring
REG_MLOCATION ='System/CurrentControlSet/Control/Session Manager/Environment'; // 环境变量存储在注册表中的位置
REG_ULOCATION = 'Environment';
begin
with TRegistry.Create do
try
if isUser then // 设置当前用户的环境变量
Result := OpenKey(REG_ULOCATION, True)
else // 设置系统环境变量,对所有用户有效
begin
RootKey := HKEY_LOCAL_MACHINE;
Result := OpenKey(REG_MLOCATION, True);
end;
if Result then
begin
WriteString(envName, envValue); // 设置注册表中环境变量的值
SetEnvironmentVariable(PChar(envName), PChar(envValue)); // 更新当前进程的环境变量值
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
// 发送消息通知所有上层的窗口,环境参数发生变化
end;
finally
Free;
end;
end;
///
/// 获取环境变量
///
/// 环境变量值
function ExpandEnvironment(const strValue: string): string;
var
chrResult: array[0..1023] of Char;
wrdReturn: DWORD;
begin
wrdReturn := ExpandEnvironmentStrings(PChar(strValue), chrResult, 1024);
if wrdReturn = 0 then
Result := strValue
else
begin
Result := Trim(chrResult);
end;
end;
end.
来源:https://www.cnblogs.com/toosuo/p/3698587.html