Ver Mensaje Individual
  #10  
Antiguo 08-07-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
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
    { Private declarations }
  public
    { Public declarations }
  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.
Responder Con Cita