Jump to content


Photo

[RESUELTO] Environment Variables en Delphi


  • Please log in to reply
12 replies to this topic

#1 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 posts

Posted 26 July 2010 - 01:37 PM

Quisiera saber si Delphi puede reconocer las Environment variables como %windir%, %SystemDrive%, etc.?

Salu2.  :)
  • 0

#2 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1750 posts
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Posted 26 July 2010 - 01:45 PM

Quisiera saber si Delphi puede reconocer las Environment variables como %windir%, %SystemDrive%, etc.?

Salu2.  :)


Sí. De hecho, gran parte del trabajo que se realiza a través del API utiliza éstas variables extensivamente.
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 26 July 2010 - 01:45 PM

Aquí hay algo al respecto.

Saludos.
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 26 July 2010 - 01:46 PM

Hola

Tambien puedes utilizar la funcion GetEnvironmentVariable para obtener la ruta de esas variables de entorno.



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   ShowMessage(GetEnvironmentVariable('WINDIR')); //%WinDir%
  4.   ShowMessage(GetEnvironmentVariable('SYSTEMDRIVE')); //%SystemDrive%
  5.   ShowMessage(GetEnvironmentVariable('TEMP')); // %Temp%
  6. end;



Salud OS
  • 0

#5 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 posts

Posted 26 July 2010 - 02:05 PM

Por ejemplo cuando tiene que buscar un archivo al usar las variables, no lo encuentra, en cambio si pongo la ubicacion habitual C:\Windows\... anda bien.

Pero asi no:
%WinDir%\system32\...

Me falta agregar algo?
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 26 July 2010 - 03:13 PM

Puedes hacer esto:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   sr: TSearchRec;
  4. begin
  5.   if findfirst(GetEnvironmentVariable('WINDIR')+'\system32\*.cpl',faanyFile,sr) = 0 then
  6.     ShowMessage(sr.name);
  7. end;



Salud OS
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 26 July 2010 - 03:35 PM

Y si deseas obtener específicamente el directorio de System32 puedes hacer esto.



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   Len: Integer;
  4.   S: string;
  5. begin
  6.     SetLength(S, Len);
  7.     Len := GetSystemDirectory(PChar(S), Len);
  8.     SetLength(S, Len);
  9.     ShowMessage(S);
  10. end;



Salud OS
  • 0

#8 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 posts

Posted 27 July 2010 - 07:28 AM

Por ejemplo si hago esto estaria bien no?

if FileExists(GetEnvironmentVariable ('Windir') + archivos) then
begin
  memo1.lines.add(archivos + ' encontrado!');
end;

En este caso el listado que tengo en archivos le saco el windir no?

Salu2.
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 27 July 2010 - 07:39 AM

Por ejemplo si hago esto estaria bien no?

En este caso el listado que tengo en archivos le saco el windir no?

Salu2.


Si y no, me explico, si no colocas el nombre del archivo precedido por una diagonal inversa no va a encontrar el archivo, es decir si la variable archivos contiene 'WindowsUpdate.log' no lo va a encontrar, necesita ser así '\WindowsUpdate.log'.



delphi
  1. archivos := '\WindowsUpdate.log';
  2. if FileExists(GetEnvironmentVariable ('Windir') + archivos) then
  3. begin
  4.   memo1.lines.add(archivos + ' encontrado!');
  5. end;



Salud OS
  • 0

#10 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 posts
  • LocationEspaña

Posted 27 July 2010 - 08:52 AM

Buenas,

A mi personalmente no me gusta incluir la barra invertida en el nombre de los archivos, pero como muchas veces no sabemos si tenemos o no dicha barra en la ruta dada por una determinada función, lo que suelo hacer es compaginar la función deseada con IncludeTrailingPathDelimiter



delphi
  1. archivos := 'WindowsUpdate.log';
  2. if FileExists(IncludeTrailingPathDelimiter(GetEnvironmentVariable ('Windir')) + archivos) then
  3. begin
  4.   memo1.lines.add(archivos + ' encontrado!');
  5. end;



Espero os sirva

Nos leemos


PD: no confundir con IncludeTrailingBackslash, la cual está fuera de uso.

  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 27 July 2010 - 09:11 AM

Que bien, esa no me la sabía, tengo que leer mas la ayuda de Delphi :)

Salud OS
  • 0

#12 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 posts

Posted 27 July 2010 - 11:24 AM

Execelente gracias a ambos, ya pude agregar el codigo y funciona muy bien.

Salu2.
  • 0

#13 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 27 July 2010 - 08:02 PM

Buenas,

A mi personalmente no me gusta incluir la barra invertida en el nombre de los archivos, pero como muchas veces no sabemos si tenemos o no dicha barra en la ruta dada por una determinada función, lo que suelo hacer es compaginar la función deseada con IncludeTrailingPathDelimiter



delphi
  1. archivos := 'WindowsUpdate.log';
  2. if FileExists(IncludeTrailingPathDelimiter(GetEnvironmentVariable ('Windir')) + archivos) then
  3. begin
  4.   memo1.lines.add(archivos + ' encontrado!');
  5. end;



Espero os sirva

Nos leemos


PD: no confundir con IncludeTrailingBackslash, la cual está fuera de uso.

Yo no recordaba bien el nombre de la función... es que es muy largo  :D Sabía que era IncludeTrailing algo  :p

Fíjate que no sabía que el uso de *BackSlash estaba desaconsejado. En algunas ocasiones he visto código con esta función... por lo que estaba pensando en "se habrá marcado como "deprecated" en alguna versión superior a D6". Fue mi sorpresa al leer la ayuda de D6 y leer justo eso:

This function is included for backward-compatibility only. New programs should use IncludeTrailingPathDelimiter.


No recuerdo haberla usado, pero de que la he visto en código de terceros la he visto. Es más creo, si no me falla la memoria, en algunos ejemplos de la carpeta demos la usan.

Saludos,
  • 0




IP.Board spam blocked by CleanTalk.