GetFileVersionInfo().....

GetFileVersionInfo().....

Postby Mayor_Valenzuela » Wed Jul 09, 2008 6:02 pm

GetFileVersionInfo() funcion del api de windows quiero saber como aplicarla en fivewin, si alguien tiene una idea por favor responder...

gracias
User avatar
Mayor_Valenzuela
 
Posts: 62
Joined: Tue Jul 08, 2008 4:27 pm
Location: Santiago, Chile

Postby Antonio Linares » Wed Jul 09, 2008 11:26 pm

Tienes un ejemplo de uso en:

\samples\FileVer.prg
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41311
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Mayor_Valenzuela » Thu Jul 10, 2008 1:58 pm

Primero gracias por responder, y lo segundo es que no tengo ese ejemplo, he tratado de linkar una funcion en borland c++, no siendo yo un programador c++, he seguido ejemplos que he encontrado en la red hechos para VB y adaptarlo a FW pero no obtengo resultados, existe alguna libreria especifica para realizar esta accion.

Gracias
User avatar
Mayor_Valenzuela
 
Posts: 62
Joined: Tue Jul 08, 2008 4:27 pm
Location: Santiago, Chile

Postby Antonio Linares » Thu Jul 10, 2008 10:53 pm

Que versión de FiveWin usas ?

Con Clipper ó con Harbour ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41311
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Version 2.6...

Postby Mayor_Valenzuela » Fri Jul 11, 2008 1:07 pm

Es la version 2.6, y estoy compilando con harbour y me he dado cuenta que estoy en el foro equivocado :lol: .... sorry
ahora con respecto a la funcion en C este es el codigo que estoy tratando de aplicar:

#include "fivewin.ch"


MsgInfo( GetVerFile(".\Hytsys.exe"), "GetVerFile()" )


Return ( Nil )



************ Codigo C ***************

#define __HARBOUR__
#define STRICT

#include <WinTen.h>
#include <Windows.h>
#include <ClipApi.h>

#include <hbapi.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif
//------------------------------------------------------------------------------------------//


#ifndef __HARBOUR__
CLIPPER GETVER( PARAMS ) // ( cFile ) --> Nil
#else
HARBOUR HB_FUN_GETVERFILE( PARAMS )
#endif
{
HINSTANCE nRetorno;
char *FileName = _parc( 1 );
DWORD dwHandle = 0;
VS_FIXEDFILEINFO *pFileInfo;
LPTSTR lpData;
BYTE bBuffer[250];
DWORD dwSize = GetFileVersionInfoSize( FileName, &dwHandle );
/*-----------------10-07-2008 18:10-----------------
* Si incluyo la siguiente linea los valores obtenidos me retornan vacios
* GetFileVersionInfo( FileName, dwHandle, dwSize, bBuffer );
*
* En Lenguaje C soy menos que novato, no se un carajo, lo unico que logre hacer
* es que me devolviera el nombre que le asigine como parametro pero la version del
* mismo ni hablar
* --------------------------------------------------*/


nRetorno = FileName;
if ( !dwSize )
{
_retnl( dwSize );
}


_retc( nRetorno );

}

//-----------------------------------------------------------------------------//


No tengo la ultima version y si me pueden ayudar un poco para obtener la version del ejecutable, no la fecha sino la version....

Gracias.... por la ayuda prestada....
User avatar
Mayor_Valenzuela
 
Posts: 62
Joined: Tue Jul 08, 2008 4:27 pm
Location: Santiago, Chile

Postby Antonio Linares » Fri Jul 11, 2008 2:05 pm

Aqui tienes el código de samples\FileVer.prg, solo para FWH:
Code: Select all  Expand view
// Just for FWH 32 bits

#include "FiveWin.ch"

//----------------------------------------------------------------------------//

function Main()

   local n

   for n = 1 to 12
       MsgInfo( GetFileVersionInfo( "filever.exe", n ) )
   next

return nil

//----------------------------------------------------------------------------//

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

HB_FUNC( GETFILEVERSIONINFO )
{
   char * szFile  = hb_parc( 1 );
   UINT uAction   = ISNUM( 2 ) ? hb_parni( 2 ) : 1;
   DWORD dwHandle = 0;
   DWORD dwSize   = GetFileVersionInfoSize( szFile, &dwHandle );
   char * szOut   = NULL;
   BOOL  bOk      = FALSE;

   if( dwSize )
   {
      char * szBlock = ( char * ) hb_xgrab( 255 );
      char * szSubBlock = ( char * ) hb_xgrab( 255 );
      HGLOBAL hMem = GlobalAlloc( GMEM_MOVEABLE, dwSize );
      VS_FIXEDFILEINFO * vsInfo;
      UINT nLen = 0;

      if( hMem )
      {
         LPVOID pMem = GlobalLock( hMem );

         if( pMem && GetFileVersionInfo( szFile, dwHandle, dwSize, pMem ) )
         {
            if( VerQueryValue( pMem, "\\VarFileInfo\\Translation", ( LPVOID * ) &vsInfo, &nLen ) )
            {
               *( LPDWORD ) vsInfo = MAKELONG( HIWORD( *( LPDWORD ) vsInfo ), LOWORD( *( LPDWORD ) vsInfo ) );

               sprintf( szBlock, "\\StringFileInfo\\%08lx\\", *( LPDWORD )( vsInfo ) );

               switch( uAction )
               {
                  case 1:
                     sprintf( szSubBlock, "%s%s", szBlock, "Comments" );
                     break;

                  case 2:
                     sprintf( szSubBlock, "%s%s", szBlock, "CompanyName" );
                     break;

                  case 3:
                     sprintf( szSubBlock, "%s%s", szBlock, "FileDescription" );
                     break;

                  case 4:
                     sprintf( szSubBlock, "%s%s", szBlock, "FileVersion" );
                     break;

                  case 5:
                     sprintf( szSubBlock, "%s%s", szBlock, "InternalName" );
                     break;

                  case 6:
                     sprintf( szSubBlock, "%s%s", szBlock, "LegalCopyright" );
                     break;

                  case 7:
                     sprintf( szSubBlock, "%s%s", szBlock, "LegalTrademarks" );
                     break;

                  case 8:
                     sprintf( szSubBlock, "%s%s", szBlock, "OriginalFilename" );
                     break;

                  case 9:
                     sprintf( szSubBlock, "%s%s", szBlock, "PrivateBuild" );
                     break;

                  case 10:
                     sprintf( szSubBlock, "%s%s", szBlock, "ProductName" );
                     break;

                  case 11:
                     sprintf( szSubBlock, "%s%s", szBlock, "ProductVersion" );
                     break;

                  case 12:
                     sprintf( szSubBlock, "%s%s", szBlock, "SpecialBuild" );
                     break;
               }

               if( VerQueryValue( pMem, szSubBlock, ( LPVOID * ) &szOut, &nLen ) )
                  bOk = TRUE;

               hb_xfree( szBlock );
               hb_xfree( szSubBlock );
            }

            GlobalUnlock( hMem );
            GlobalFree( hMem );
         }
      }
   }

   if( bOk )
      hb_retc( szOut );
   else
      hb_retc( "" );
}

#pragma ENDDUMP

//----------------------------------------------------------------------------//
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41311
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

I gonna try it....

Postby Mayor_Valenzuela » Fri Jul 11, 2008 2:58 pm

Gracias
probare el codigo, y veremos....

Muchas gracias.... Antonio...
User avatar
Mayor_Valenzuela
 
Posts: 62
Joined: Tue Jul 08, 2008 4:27 pm
Location: Santiago, Chile

Postby Antonio Linares » Fri Aug 01, 2008 7:31 am

Te funcionó ? :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41311
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

GetFileVersion()

Postby Mayor_Valenzuela » Wed Aug 06, 2008 4:29 pm

Si me fue de mucha ayuda, gracias... y sorry por no responder antes..
User avatar
Mayor_Valenzuela
 
Posts: 62
Joined: Tue Jul 08, 2008 4:27 pm
Location: Santiago, Chile


Return to FiveWin for CA-Clipper

Who is online

Users browsing this forum: No registered users and 2 guests