GetFileVersionInfo().....

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

GetFileVersionInfo().....

Post by Mayor_Valenzuela »

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

gracias
User avatar
Antonio Linares
Site Admin
Posts: 42728
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 94 times
Been thanked: 108 times
Contact:

Post by Antonio Linares »

Tienes un ejemplo de uso en:

\samples\FileVer.prg
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Mayor_Valenzuela
Posts: 62
Joined: Tue Jul 08, 2008 4:27 pm
Location: Santiago, Chile

Post by Mayor_Valenzuela »

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
Antonio Linares
Site Admin
Posts: 42728
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 94 times
Been thanked: 108 times
Contact:

Post by Antonio Linares »

Que versión de FiveWin usas ?

Con Clipper ó con Harbour ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Mayor_Valenzuela
Posts: 62
Joined: Tue Jul 08, 2008 4:27 pm
Location: Santiago, Chile

Version 2.6...

Post by Mayor_Valenzuela »

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
Antonio Linares
Site Admin
Posts: 42728
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 94 times
Been thanked: 108 times
Contact:

Post by Antonio Linares »

Aqui tienes el código de samples\FileVer.prg, solo para FWH:

Code: Select all | Expand

// Just for FWH 32 bits#include "FiveWin.ch"//----------------------------------------------------------------------------//function Main()   local n   for n = 1 to 12       MsgInfo( GetFileVersionInfo( "filever.exe", n ) )   nextreturn 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
Mayor_Valenzuela
Posts: 62
Joined: Tue Jul 08, 2008 4:27 pm
Location: Santiago, Chile

I gonna try it....

Post by Mayor_Valenzuela »

Gracias
probare el codigo, y veremos....

Muchas gracias.... Antonio...
User avatar
Antonio Linares
Site Admin
Posts: 42728
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 94 times
Been thanked: 108 times
Contact:

Post by Antonio Linares »

Te funcionó ? :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Mayor_Valenzuela
Posts: 62
Joined: Tue Jul 08, 2008 4:27 pm
Location: Santiago, Chile

GetFileVersion()

Post by Mayor_Valenzuela »

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