GetFileVersionInfo().....
- Mayor_Valenzuela
- Posts: 62
- Joined: Tue Jul 08, 2008 4:27 pm
- Location: Santiago, Chile
GetFileVersionInfo().....
GetFileVersionInfo() funcion del api de windows quiero saber como aplicarla en fivewin, si alguien tiene una idea por favor responder...
gracias
gracias
- 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:
- Mayor_Valenzuela
- Posts: 62
- Joined: Tue Jul 08, 2008 4:27 pm
- Location: Santiago, Chile
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
Gracias
- 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:
- Mayor_Valenzuela
- Posts: 62
- Joined: Tue Jul 08, 2008 4:27 pm
- Location: Santiago, Chile
Version 2.6...
Es la version 2.6, y estoy compilando con harbour y me he dado cuenta que estoy en el foro equivocado
.... 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....

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....
- 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:
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//----------------------------------------------------------------------------//
- Mayor_Valenzuela
- Posts: 62
- Joined: Tue Jul 08, 2008 4:27 pm
- Location: Santiago, Chile
- 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:
- Mayor_Valenzuela
- Posts: 62
- Joined: Tue Jul 08, 2008 4:27 pm
- Location: Santiago, Chile