[RESUELTO] Environment Variables en Delphi
#1
Escrito 26 julio 2010 - 01:37
Salu2.
#2
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.
#4
Escrito 26 julio 2010 - 01:46
Tambien puedes utilizar la funcion GetEnvironmentVariable para obtener la ruta de esas variables de entorno.
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(GetEnvironmentVariable('WINDIR')); //%WinDir% ShowMessage(GetEnvironmentVariable('SYSTEMDRIVE')); //%SystemDrive% ShowMessage(GetEnvironmentVariable('TEMP')); // %Temp% end;
Salud OS
#5
Escrito 26 julio 2010 - 02:05
Pero asi no:
%WinDir%\system32\...
Me falta agregar algo?
#6
Escrito 26 julio 2010 - 03:13
procedure TForm1.Button1Click(Sender: TObject); var sr: TSearchRec; begin if findfirst(GetEnvironmentVariable('WINDIR')+'\system32\*.cpl',faanyFile,sr) = 0 then ShowMessage(sr.name); end;
Salud OS
#7
Escrito 26 julio 2010 - 03:35
procedure TForm1.Button1Click(Sender: TObject); var Len: Integer; S: string; begin SetLength(S, Len); Len := GetSystemDirectory(PChar(S), Len); SetLength(S, Len); ShowMessage(S); end;
Salud OS
#8
Escrito 27 julio 2010 - 07:28
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.
#9
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'.
archivos := '\WindowsUpdate.log'; if FileExists(GetEnvironmentVariable ('Windir') + archivos) then begin memo1.lines.add(archivos + ' encontrado!'); end;
Salud OS
#10
Escrito 27 julio 2010 - 08:52
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
archivos := 'WindowsUpdate.log'; if FileExists(IncludeTrailingPathDelimiter(GetEnvironmentVariable ('Windir')) + archivos) then begin memo1.lines.add(archivos + ' encontrado!'); end;
Espero os sirva
Nos leemos
PD: no confundir con IncludeTrailingBackslash, la cual está fuera de uso.
#11
Escrito 27 julio 2010 - 09:11
Salud OS
#12
Escrito 27 julio 2010 - 11:24
Salu2.
#13
Escrito 27 julio 2010 - 08:02
Yo no recordaba bien el nombre de la función... es que es muy largo Sabía que era IncludeTrailing algoBuenas,
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
archivos := 'WindowsUpdate.log'; if FileExists(IncludeTrailingPathDelimiter(GetEnvironmentVariable ('Windir')) + archivos) then begin memo1.lines.add(archivos + ' encontrado!'); end;
Espero os sirva
Nos leemos
PD: no confundir con IncludeTrailingBackslash, la cual está fuera de uso.
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,