Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Obtener el valor de una variable de entorno (https://www.clubdelphi.com/foros/showthread.php?t=80789)

seoane 04-04-2007 01:47:23

Obtener el valor de una variable de entorno
 
EDITO:Gracias a roman acabo de darme cuenta de que en delphi ya existe una función que hace lo mismo, y curiosamente se llama también GetEnvironmentVariable. Así que la siguiente función ya no tiene mucho sentido ...


Código Delphi [-]
function GetEnvVar(Nombre: string): string;
var
  Str: PChar;
  Len: Integer;
begin
  Len:= GetEnvironmentVariable(PChar(Nombre),nil,0);
  if Len > 0 then
  begin
    GetMem(Str,Len+1);
    try
      GetEnvironmentVariable(PChar(Nombre),Str,Len);
      Result:= String(Str);
    finally
      FreeMem(Str);
    end;
  end else Result:= EmptyStr;
end;

// Ejemplo de uso
ShowMessage(GetEnvVar('USERNAME'));

Algunas variables interesantes:
Código:

ALLUSERSPROFILE
APPDATA
COMPUTERNAME
ComSpec
HOMEDRIVE
HOMEPATH
ProgramFiles
SystemDrive
SystemRoot
TEMP
TMP
USERDOMAIN
USERNAME
USERPROFILE
windir


casacham 04-04-2007 01:47:24

Hola Domingo Seoane, he probado tu truco y anda muy bien. Corto, sencillo y rapido. No es una critica lo que te voy a hacer, sino pedir que expliques un poquito como funciona el truco. Desde ya muchas gracias

seoane 04-04-2007 02:15:11

El código no es muy complejo, se limita a usar la función GetEnvironmentVariable. Esta función nos devuelve el valor de una variable de entorno, pasándole como parámetros el nombre de la variable, un buffer donde almacenar el valor y la longitud del buffer (en caracteres).

Primero llamamos a la función indicándole que la longitud del buffer es cero, de esta forma nos devuelve la longitud (en caracteres) de valor. Entonces usamos GetMem para reservar tantos bytes en memoria como longitud tiene el valor mas uno (por el carácter nulo). Entonces volvemos a llamar a la función con los parámetros correctos. Por ultimo ya solo nos queda liberar la memoria que habíamos reservado utilizando FreeMem.

roman 05-04-2007 00:16:57

¿No sería igual utilizar SysUtils.GetEnvironmentVariable?

seoane 05-04-2007 02:52:09

Jajaja, tienes toda la razón roman, estoy avergonzado. El código es la traducción, mas o menos literal, de una función de C que tenia guardada y no se me ocurrió pensar que en delphi ya existía una función con el mismo nombre que la API pero que devolvía un string.


La franja horaria es GMT +2. Ahora son las 14:10:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi