FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for CA-Clipper GetFileVersionInfo().....
Posts: 62
Joined: Tue Jul 08, 2008 04:27 PM
GetFileVersionInfo().....
Posted: Wed Jul 09, 2008 06:02 PM

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

gracias

Mario Valenzuela M.

Santiago, Chile.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
GetFileVersionInfo().....
Posted: Wed Jul 09, 2008 11:26 PM

Tienes un ejemplo de uso en:

\samples\FileVer.prg

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 62
Joined: Tue Jul 08, 2008 04:27 PM
GetFileVersionInfo().....
Posted: Thu Jul 10, 2008 01: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

Mario Valenzuela M.

Santiago, Chile.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
GetFileVersionInfo().....
Posted: Thu Jul 10, 2008 10:53 PM

Que versi贸n de FiveWin usas ?

Con Clipper 贸 con Harbour ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 62
Joined: Tue Jul 08, 2008 04:27 PM
Version 2.6...
Posted: Fri Jul 11, 2008 01: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....

Mario Valenzuela M.

Santiago, Chile.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
GetFileVersionInfo().....
Posted: Fri Jul 11, 2008 02:05 PM
Aqui tienes el c贸digo de samples\FileVer.prg, solo para FWH:
// 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
Posts: 62
Joined: Tue Jul 08, 2008 04:27 PM
I gonna try it....
Posted: Fri Jul 11, 2008 02:58 PM

Gracias
probare el codigo, y veremos....

Muchas gracias.... Antonio...

Mario Valenzuela M.

Santiago, Chile.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
GetFileVersionInfo().....
Posted: Fri Aug 01, 2008 07:31 AM

Te funcion贸 ? :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 62
Joined: Tue Jul 08, 2008 04:27 PM
GetFileVersion()
Posted: Wed Aug 06, 2008 04:29 PM

Si me fue de mucha ayuda, gracias... y sorry por no responder antes..

Mario Valenzuela M.

Santiago, Chile.

Continue the discussion