Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Системные функции, WinAPI, работа с железом > Работа с переменными окружения


Автор: Song 11.12.03, 19:32
Вариант 1:

Для этого используется API функция GetEnvironmentVariable.

GetEnvironmentVariable возвращает значения:

- В случае удачного выполнения функции, возвращаемое значение содержит количество символов, хранящихся в буфере, не включая последнего нулевого.

- Если указанная переменная окружения для текущего процесса не найдена, то возвращаемое значение равно нулю.

- Если буфер не достаточного размера, то возвращаемое значение равно требуемому размеру для хранения строки значения и завершающего нулевого символа.

function GetDOSEnvVar(const VarName: string): string;
var
 i: integer;
begin
 Result := '';
 try
   i := GetEnvironmentVariable(PChar(VarName), nil, 0);

   if i > 0 then
     begin
       SetLength(Result, i);
       GetEnvironmentVariable(Pchar(VarName), PChar(Result), i);
     end;
 except
   Result := '';
 end;
end;


Вариант 2:

procedure TMainFrm.AddVarsToMemo(Sender: TObject);
var
 p : pChar;
begin
 Memo1.Lines.Clear;
 Memo1.WordWrap := false;
 p := GetEnvironmentStrings;
 while p^ <> #0 do begin
   Memo1.Lines.Add(StrPas(p));
   inc(p, lStrLen(p) + 1);
 end;
FreeEnvironmentStrings(p);
end;


Добавлено в
Как установить переменные окружения

Следующая простая подпрограмма создаёт новые значения в переменных окружения. Если переменной окружения не существует, то она создаётся. Если переменной окружения установить значение пустой строки, то переменная удаляется. Функция возвращает 0, если значение переменной установлено или переменная создана успешно, либо возвратит значение ошибки Windows вслучае неудачи. Обратите внимание, что размер пространства доступного для переменных окружения ограничен.

function SetEnvVarValue(const VarName,
 VarValue: string): Integer;
begin
 // Просто вызываем API функцию
 if Windows.SetEnvironmentVariable(PChar(VarName),
   PChar(VarValue)) then
   Result := 0
 else
   Result := GetLastError;
end;


ЗАМЕЧАНИЕ: данный способ позволяет делать изменения в переменных окружения только для текущего процесса либо для дочерних процессов, порождённых текущим.

Для того, чтобы передать какую-либо переменную окружения в дочерний процесс просто:

1) Создайте новую переменную окружения при помощи SetDOSEnvVar.
2) Запустите новую программу.

А вот как выглядит пример передачи текущих переменных окружения + переменной FOO=Bar в дочерний процесс:

{ skip ... }
var
 ErrCode: Integer;
begin
 ErrCode := SetEnvVarValue('FOO', 'Bar');
 if ErrCode = 0 then
   WinExec('MyChildProg.exe', SW_SHOWNORMAL);
 else
   ShowMessage(SysErrorMessage(ErrCode));
end;
{ ... end skip }


Так же можно воспользоваться примером, содержащем различные примеры работы с переменными окружения, который можно скачать здесь: http://www.sources.ru/delphi/system/envvardemo.zip

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)