elrayo76,
Te comento:
Cita:
|
Empezado por elrayo76
...en Delphi XE3 esa función no tiene los mismos tres parámetros como se ve en el ejemplo de Lepe...
|
En el ejemplo del
Msg #3 se usa la
API GetEnvironmentVariable de Windows no la función de Delphi contenida en la unidad SysUtils.
Cita:
|
Empezado por elrayo76
...nlsgarcia, si te fijas en los enlaces que tu mandas en tu mensaje, lo que dice Microsoft de la API y lo que esta implementado por Embarcadero para el uso de esa API no coincide para nada en los parámetros...
|
Como te comente en el
Msg #4 son funciones análogas pero con diferentes parámetros, el uso de una u otra (Windows o Delphi) depende del programador, en lenguajes en los que no se incluyan esta función
se debe hacer uso del API de Windows.
Cita:
|
Empezado por elrayo76
...¿porque no existe código alguno en la Web con esta función y si con la que tiene los tres parámetros y que no existe en ninguna de las units de Delphi en ninguna de sus versiones desde la 7 en adelante. O es que todos usan la API y nadie dice de donde la llaman?...
|
Pregunto:
¿Te fue posible probar el código del Msg #4?, el código sugerido
funciono correctamente en Delphi 7, Delphi 2006 y Delphi 2010 y hace uso de la función GetEnvironmentVariable que se encuentra en SysUtils.
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
end;
const
EnvWin : array[0..26] of string =
('ALLUSERSPROFILE', 'APPDATA', 'CLIENTNAME',
'COMMONPROGRAMFILES', 'COMPUTERNAME', 'COMSPEC',
'HOMEDRIVE', 'HOMEPATH', 'LOGONSERVER',
'NUMBER_OF_PROCESSORS','OS', 'PATH',
'PATHEXT', 'PROCESSOR_ARCHITECTURE', 'PROCESSOR_IDENTIFIER',
'PROCESSOR_LEVEL', 'PROCESSOR_REVISION', 'PROGRAMFILES',
'SESSIONNAME', 'SYSTEMDRIVE', 'SYSTEMROOT',
'TEMP', 'TMP', 'USERDOMAIN',
'USERNAME', 'USERPROFILE', 'WINDIR'
);
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetWinEnvVar(WinEnvVar: String): String;
var
ResultEnvVar: String;
LenEnvVar: Integer;
begin
LenEnvVar:= GetEnvironmentVariable(PChar(WinEnvVar),nil,0);
if LenEnvVar > 0 then
begin
SetLength(ResultEnvVar,LenEnvVar);
Windows.GetEnvironmentVariable(PChar(WinEnvVar),PChar(ResultEnvVar),LenEnvVar);
Result:= ResultEnvVar;
end
else
Result:= EmptyStr;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
ListBox1.Clear;
for i:= Low(EnvWin) to High(EnvWin) do
begin
ListBox1.Items.Add(Format('%s = %s',[EnvWin[i],SysUtils.GetEnvironmentVariable(EnvWin[i])]));
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i : Integer;
begin
ListBox1.Clear;
for i:= Low(EnvWin) to High(EnvWin) do
begin
ListBox1.Items.Add(Format('%s = %s',[EnvWin[i],GetWinEnvVar(EnvWin[i])]));
end;
end;
end.
El código anterior
es un ejemplo del uso de la función GetEnvironmentVariable (Unit Windows y SysUtils) haciendo la llamada explicita de esta en su unidad correspondiente (Aunque no es necesario en Delphi7, Delphi 2006 y Delphi 2010 donde funciono correctamente según lo esperado) para destacar su funcionalidad análoga y diferencia de parámetros. Para facilitar las pruebas, el ejemplo esta disponible en el siguiente link:
http://terawiki.clubdelphi.com/Delph...ntVariable.rar
Cita:
|
Empezado por dec
...Lo que está pasando, seguramente, es que, por el orden en que incluyes las unidades, Delphi está queriendo usar la función de la unidad "Windows", y no la de la unidad "SysUtils"...
|
En las pruebas que hice en Delphi 7, Delphi 2006 y Delphi 2010
la unidad SysUtils estaba declarada después de la unidad Windows y esto no afecto el uso de la función GetEnvironmentVariable de Delphi,
quizás en Delphi XE3 sea diferente.
Te sugiero leer nuevamente el
Msg #4 y probar el código del enlace sugerido, quizás ayude a aclarar un poco el tema en cuestión.
Espero sea útil
Nelson.