Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-09-2005
Avatar de n3mohack
n3mohack n3mohack is offline
Miembro
 
Registrado: may 2004
Ubicación: Chile-Stgo-Huechuraba
Posts: 41
Poder: 0
n3mohack Va por buen camino
Obtener propiedades de EXE..

Estimados..
Ej. necesito obtener las propiedades de los exe's contenidos en una carpeta, especificamente me interesa la versión de cada ejecutable.

¿alguna idea?.. ¿alguna api?...

Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 13-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Lo siguiente es una adaptación del truco "Obtener la version de tu aplicacion definida desde el IDE Delphi" que puede hallarse en TrucoMania.

Código Delphi [-]
 function GetExeVersion(exePath: string) : string;
 var
   Size, Size2: DWord;
   Pt, Pt2: Pointer;
 begin
   if not FileExists(exePath) then Exit;
   Size := GetFileVersionInfoSize(PChar (exePath), Size2);
   if Size > 0 then
   begin
     GetMem (Pt, Size);
     try
       GetFileVersionInfo (PChar (exePath), 0, Size, Pt);
       VerQueryValue (Pt, '\', Pt2, Size2);
       with TVSFixedFileInfo (Pt2^) do
       begin
         Result:= IntToStr (HiWord (dwFileVersionMS)) + '.' +
                  IntToStr (LoWord (dwFileVersionMS)) + '.' +
                  IntToStr (HiWord (dwFileVersionLS)) + '.' +
                  IntToStr (LoWord (dwFileVersionLS));
       end;
     finally
       FreeMem (Pt);
     end;
   end;
 end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 14-09-2005
Avatar de n3mohack
n3mohack n3mohack is offline
Miembro
 
Registrado: may 2004
Ubicación: Chile-Stgo-Huechuraba
Posts: 41
Poder: 0
n3mohack Va por buen camino
listoco... me funko!!! grax
Responder Con Cita
  #4  
Antiguo 03-10-2005
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Y para una aplicacion externa??

Como se haria??

Salu2.CRIS.
Responder Con Cita
  #5  
Antiguo 03-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por CRIS
Y para una aplicacion externa??
¿Probaste ya si la función de más arriba puede valerte, incluso cuando no hablemos de un "ejecutable Delphi"?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 03-10-2005
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Con la aplicacion en curso si rula perfectamente, pero yo necesito que me devuelva la version de una aplicacion creada en VB que lleva su info version.

pero esque no se como hacerlo para que me de la info de esa aplicacion.

Salu2. y gracias contestame.
Responder Con Cita
  #7  
Antiguo 03-10-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Las últimas versiones de Delphi traen en SysUtils la función GetFileVersion, que hace la mitad del trabajo de la función propuesta por Dec.

Cita:
Empezado por CRIS
Con la aplicacion en curso si rula perfectamente...
Me traducen eso por favor

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 03-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por CRIS
Con la aplicacion en curso si rula perfectamente, pero yo necesito que me devuelva la version de una aplicacion creada en VB que lleva su info version.
¿Tengo que entender que lo probaste con la aplicación creada con Visual Basic y no te funcionó? La función de arriba necesita de la ruta de un ejecutable, ¿probaste con la ruta del ejecutable cuya versión quieres obtener, o sea el que está hecho con Visual Basic?


Cita:
Empezado por Federico
Con la aplicacion en curso si rula perfectamente...
Pecando tal vez de pedante (nada más lejos de mi intención) creo que podría "traducirse" así: "He probado la función de más arriba pasando a esta como parámetro la ruta del archivo ejecutable de la aplicación que estoy llevando a cabo con Delphi y obtengo la información que se espera perfectamente". Bueno, eso creo, más o menos, que quiere decirse.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-10-2005 a las 14:26:39. Razón: Corrección del texto.
Responder Con Cita
  #9  
Antiguo 03-10-2005
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Me funciona solo esto y gracias a los dos por ayudarme.

Código Delphi [-]
 procedure TForm1.SpeedButton1Click(Sender: TObject);
 
   function GetAppVersion:string;
   var
     Size, Size2: DWord;
     Pt, Pt2: Pointer;
   begin
     Size := GetFileVersionInfoSize(PChar (ParamStr (0)), Size2);
     if Size > 0 then
     begin
       GetMem (Pt, Size);
       try
         GetFileVersionInfo (PChar (ParamStr (0)), 0, Size, Pt);
         VerQueryValue (Pt, '\', Pt2, Size2);
         with TVSFixedFileInfo (Pt2^) do
         begin
           Result:= ' Ver '+
             IntToStr (HiWord (dwFileVersionMS)) + '.' +
             IntToStr (LoWord (dwFileVersionMS)) + '.' +
             IntToStr (HiWord (dwFileVersionLS)) + '.' +
             IntToStr (LoWord (dwFileVersionLS));
         end;
       finally
         FreeMem (Pt);
       end;
     end;
   end;
 
 begin
   label1.Caption:=GetAppVersion;
 end;

Última edición por dec fecha: 03-10-2005 a las 15:00:14. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
  #10  
Antiguo 03-10-2005
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Solucionado gracias miles.

Código Delphi [-]
function GetFileVersion( AFileName : String ) : string;
var
  Size,
  Size2 : DWord;
  Pt,
  Pt2   : Pointer;
begin
  Size := GetFileVersionInfoSize(PChar(AFileName), Size2);
  if Size > 0 then
  begin
    GetMem(Pt, Size);
    try
      GetFileVersionInfo (PChar(AFileName), 0, Size, Pt);
      VerQueryValue (Pt, '', Pt2, Size2);
      with TVSFixedFileInfo (Pt2^) do
        Result:= Format('Versión %d.%d.%d.%d', [ HiWord(dwFileVersionMS),
                                                       LoWord(dwFileVersionMS),
                                                       HiWord(dwFileVersionLS),
                                                       LoWord(dwFileVersionLS)] );
    finally
      FreeMem (Pt);
    end;
  end;
end;

{$R *.dfm}

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 label1.Caption := GetFileVersion( 'C:\cris\gp4champ.exe' );

end;

end.
Responder Con Cita
  #11  
Antiguo 06-10-2005
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Y si queremos pedirle descripcion, compañia y demas cosas??? como se haria.

Salu2.CRIS.
Responder Con Cita
  #12  
Antiguo 08-10-2005
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Lo tengo casi solucionado el problema es que me da la descripcion y demas datos del archivo pero solo del archivo que lleva este codigo, no se como decirle una ruta para que lea los datos del archivo que yo quiera.

Código Delphi [-]
function  GetAppInfo(De:string):string;

  {Se pueden pedir los siguientes datos:
     CompanyName
     FileDescription
     FileVersion
     InternalName
     LegalCopyright
     OriginalFilename
     ProductName
     ProductVersion
  }

  type
    PaLeerBuffer = array [0..MAX_PATH] of char;

  var
   Size, Size2 : DWord;
   Pt, Pt2     : Pointer;
   Idioma      : string;

   begin
     Result:='';
     Size := GetFileVersionInfoSize(PChar (Application.Exename), Size2);
     if Size > 0 then
     begin
       GetMem (Pt, Size);
       GetFileVersionInfo (PChar (ParamStr (0)), 0, Size, Pt);
       {Obtenemos la cadena de translacion, requerida para obtener el resto
       de datos del Versioninfo}
       VerQueryValue( Pt, '\VarFileInfo\Translation',Pt2, Size2);
       Idioma:=IntToHex( DWord(Pt2^) ,8 );
       {Le damos la vuelta (Es windows, que quieres...}
       Idioma:=Copy(Idioma,5,4)+Copy(Idioma,1,4);

       {Pedimos la info requerida...}
       VerQueryValue( Pt,
                      Pchar('\StringFileInfo\'+
                      Idioma+'\'+
                      De),
                      Pt2, Size2);
       if Size2 > 0 then
       begin
         {Y la devolvemos}
         Result:=Copy(PaLeerBuffer(Pt2^),1,Size2);
       end else
         raise Exception.Create( 'No existe esa informacion en este ejecutable'+
                                 #13+
                                 'There are not this info in this executable');
       FreeMem (Pt);
     end else
       raise exception.Create ( 'Lo siento, no hay VersionInfo disponible '+
                                'en este ejecutable.'+#13+
                                'Sorry there are not VersionInfo available'+
                                'in this executable.');
   end;
{$R *.dfm}

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
label1.Caption := GetAppInfo ('FileDescription');
end;


Sabeis como y donde poner la ruta del archivo??

Salu2.CRIS.
Responder Con Cita
  #13  
Antiguo 09-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Sustituye en el código tanto "Application.ExeName" como "ParamStr(0)" por la ruta del archivo de que quieras obtener la información. Podrías, en todo caso, tratar de adaptar el código de forma que pudieras llamar a la función indicando la ruta del ejecutable en cuestión, así como la información que precises obtener. De otra manera te será, en mi opinión, complicado utilizar dicho código.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #14  
Antiguo 09-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

CRIS, preparé en base al código de más arriba un sencillo componente que tal vez pueda resultar de tu interés, o, a lo menos, ofrecerte alguna idea. Lo encontrarás dentro del paquete "DecComp" que puedes encontrar aquí mismo. Le llamé "TInfoExe" y en su código fuente te mencioné a modo de agradecimiento por darme la idea para llevarlo a cabo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #15  
Antiguo 09-10-2005
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Muchas gracias lo pruebo en un rato y te cuento.

Salu2.CRIS.
Responder Con Cita
  #16  
Antiguo 10-10-2005
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Un millon de gracias dec, es justo lo que necesitaba pero no pense que te ibas a molestar hasta el punto de llegar a montar un componente para mi, aunque seguro que ahora hay gente que lo agracede ya que es verdaderamente una pasada, le pides todo lo que quieras al fichero y te lo da.

Un millon de gracias de nuevo, muy agradecido.

pd. gracias tambien por nombrarme en el componente.

Salu2.CRIS.
Responder Con Cita
  #17  
Antiguo 22-09-2012
viveba viveba is offline
Miembro
 
Registrado: nov 2006
Posts: 24
Poder: 0
viveba Va por buen camino
sobre el componente TInfoExe

Hola Dec, tal vez sea tarde ya para seguir este tema, pero estoy interesado en el componente que comentás, y no puedo encontrarlo, si aún existe te agradecería mucho me digas cómo puedo acceder a él.

Gracias de antemano.
Responder Con Cita
  #18  
Antiguo 27-09-2012
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
Lo puedes encontrar en el FTP dentro de un conjunto de componentes deccomp.zip
Responder Con Cita
  #19  
Antiguo 27-09-2012
viveba viveba is offline
Miembro
 
Registrado: nov 2006
Posts: 24
Poder: 0
viveba Va por buen camino
Muchas gracias juanlaplata, ya lo descargo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:24:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi