Ir al contenido


Foto

[RESUELTO] Environment Variables en Delphi


  • Por favor identifícate para responder
12 respuestas en este tema

#1 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 26 julio 2010 - 01:37

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

Salu2.  :)
  • 0

#2 TiammatMX

TiammatMX

    Advanced Member

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

Escrito 26 julio 2010 - 01:45

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
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 26 julio 2010 - 01:45

Aquí hay algo al respecto.

Saludos.
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 26 julio 2010 - 01:46

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 mensajes

Escrito 26 julio 2010 - 02:05

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
  • 14.448 mensajes
  • LocationMéxico

Escrito 26 julio 2010 - 03:13

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
  • 14.448 mensajes
  • LocationMéxico

Escrito 26 julio 2010 - 03:35

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 mensajes

Escrito 27 julio 2010 - 07:28

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
  • 14.448 mensajes
  • LocationMéxico

Escrito 27 julio 2010 - 07:39

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 mensajes
  • LocationEspaña

Escrito 27 julio 2010 - 08:52

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
  • 14.448 mensajes
  • LocationMéxico

Escrito 27 julio 2010 - 09:11

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 mensajes

Escrito 27 julio 2010 - 11:24

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

Salu2.
  • 0

#13 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 27 julio 2010 - 08:02

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.