How to retrieve environment variables
Retrieving environment variables (such as
PATH,
COMSPEC,
PROMPT, etc.) from 32bit programs is not so difficult since you can use the Win32 function "
GetEnvironmentVariable()". On the other hand, if you're writing a 16bit program you have to do little bit more work. Following "
GetEnvVar()" function can help you to easily retrieve environment variables regardless of whether your program is 16bit or 32bit:
const
{
change the following value if you
expect more than 250 char values
from env. vars. set to 250 by
default to be compatible with
16bit versions of Delphi
}
cnMaxVarValueSize = 250;
function GetEnvVar(
const csVarName : string ) : string;
{$IFDEF WIN32}
var
pc1,
pc2 : PChar;
begin
{
although you can use huge strings with
Delphi 2.x, we'll use good old PChars
and allocate memory here
}
pc1 :=
StrAlloc( Length( csVarName )+1 );
pc2 :=
StrAlloc( cnMaxVarValueSize + 1 );
StrPCopy( pc1, csVarName );
GetEnvironmentVariableA(
pc1, pc2, cnMaxVarValueSize );
Result := StrPas( pc2 );
StrDispose( pc1 );
StrDispose( pc2 );
end;
{$ELSE}
var
w1 : Word;
pc1 : PChar;
begin
GetEnvVar := '';
w1 := Length( csVarName );
{$IFDEF Windows}
pc1 := GetDosEnvironment;
{$ELSE}
pc1 :=
Ptr(Word( Ptr( PrefixSeg, $2C )^),
0 );
{$ENDIF}
while( #0 <> pc1^ ) do
begin
if( 0 = StrLIComp( pc1,
@csVarName[ 1 ], w1 ) )
and ( '=' = pc1[ w1 ] ) then
begin
GetEnvVar :=
StrPas( pc1 + w1 + 1 );
Exit;
end;
Inc( pc1, StrLen( pc1 ) + 1 );
end;
GetEnvVar := '';
end;
{$ENDIF}
Listing #1 : Delphi code. Download
getenv (0.73 KB).
Now you can retrieve the environment variable
PATH (for example) by using the following call:
GetEnvVar( 'PATH' );
Listing #2 : Delphi code. Download
demo (0.14 KB).
Don't forget to add
Windows and
SysUtils units to your
uses statement when using the above function.
Applicable Keywords : Delphi, Delphi 1.x, Delphi 2.x, Delphi 3.x, Functions, Win32