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: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- 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: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- 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: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Aqui tienes el código de samples\FileVer.prg, solo para FWH:
Code: Select all
// 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
//----------------------------------------------------------------------------//
- Mayor_Valenzuela
- Posts: 62
- Joined: Tue Jul 08, 2008 4:27 pm
- Location: Santiago, Chile
I gonna try it....
Gracias
probare el codigo, y veremos....
Muchas gracias.... Antonio...
probare el codigo, y veremos....
Muchas gracias.... Antonio...
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Mayor_Valenzuela
- Posts: 62
- Joined: Tue Jul 08, 2008 4:27 pm
- Location: Santiago, Chile
GetFileVersion()
Si me fue de mucha ayuda, gracias... y sorry por no responder antes..