Tambem da pra pegar do 'resources' abaixo exemplo.
Arquivo.rc
Código: Selecionar todos
#include <windows.h>
LANGUAGE LANG_PORTUGUESE,SUBLANG_PORTUGUESE_BRAZILIAN
APPLICATION_ICO ICON "res\\inco_app.ico"
1 24 "res\\WindowsXP.Manifest"
1002 BITMAP "res\\buscar.bmp"
1004 ICON "res\\sistema.ico"
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK 0x0
FILEFLAGS 0x0
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
{
BLOCK "StringFileInfo"
{
BLOCK "041604B0"
{
VALUE "Comments", "Sistema Desenvolvido Pela Sygecom Informática Ltda - www.sygecom.com.br \0"
VALUE "CompanyName", "Sygecom Informática Ltda - www.sygecom.com.br\0"
VALUE "FileDescription", "Nomo do sistema\0"
VALUE "FileVersion", "1.0.0.0\0"
VALUE "InternalName", "Projeto SISTEMA\0"
VALUE "LegalCopyright", "Sygecom Informática Ltda\0"
VALUE "LegalTrademarks", "SISTEMA / SYGECOM\0"
VALUE "OriginalFilename", "SISTEMA.EXE\0"
VALUE "ProductName", "NOME DO PRODUTO\0"
VALUE "ProductVersion", "1.0.0.0\0"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x416, 0x4B0
}
}
Esse arquivo.rc deve ser linkado junto com o aplicatico, se tiver usando hbmake basta colocar na linha
Resource file Name: Arquivo.rc
Depois de dentro da aplicação para pegar a versão e outras opções tem que linkar a função abaixo junto com o aplicativo:
Código: Selecionar todos
#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
Function NomeExecutavel(lPath)
LOCAL nPos, cRet
If Empty(lpath)
nPos:= RAT("\", hb_argv(0))
cRet:= substr(hb_argv(0), nPos+1)
else
cRet:= hb_argv(0)
endif
Return cRet
Depois para pegar as informações do EXE:
Alert(GETFILEVERSIONINFO(NomeExecutavel(),4)) // mostra a versão atual do Executavel
Alert(GETFILEVERSIONINFO(NomeExecutavel(),2)) // mostra o nome da empresa
Alert(GETFILEVERSIONINFO(NomeExecutavel(),8)) // nome original do EXE
.....
.....
.....
Obs: a Função GETFILEVERSIONINFO() foi retirada do link abaixo:
http://forums.fivetechsupport.com/viewt ... NFO#p61420