具体方法如下:
1.0 以vc6.0为例,首先在Project --- Settings --- Link --- Category:Input ---Object/Library modules : version.lib
也可以在代码当中,进行隐式的调用 --- 调用方法为
#pragma comment(lib,"version.lib")
2.0 具体代码如下:
CHAR szAppPath[ MAX_PATH ] = { 0 };
// 获取应用程序的名字
::GetModuleFileName( NULL, szAppPath, MAX_PATH );
// 获取当前使用的应用程序的版本信息。
INT nVersionLen = ::GetFileVersionInfoSize( szAppPath , NULL );
if ( nVersionLen <= 0 )
{
return ;
}
CHAR* pBuffer = new CHAR[ nVersionLen ];
if ( !pBuffer )
{
return ;
}
if ( !::GetFileVersionInfo( szAppPath, NULL, nVersionLen, pBuffer ) )
{
return ;
}
// 为了方便访问。
struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *lpTranslate;
// Read the list of languages and code pages.
UINT cbTranslate;
::VerQueryValue( pBuffer, "//VarFileInfo//Translation",
(LPVOID*)&lpTranslate, &cbTranslate );
// Read the file description for each language and code page.
// 资源的各种名称
//CHAR* szVersion[] = {
// "Comments", "InternalName", "ProductName",
// "CompanyName", "LegalCopyright", "ProductVersion",
// "FileDescription", "LegalTrademarks", "PrivateBuild",
// "FileVersion", "OriginalFilename", "SpecialBuild"
//};
// dwBytes最大值应该是301.
// 应用仅仅允许输入最多300个字符:)
UINT dwBytes;
CHAR* lpBuffer;
CHAR szSubBlock[256];
CString m_stAppVersion;
_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//Comments",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion = lpBuffer;
}
_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//InternalName",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion = lpBuffer;
}
_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//ProductName",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion = lpBuffer;
}
_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//CompanyName",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion = lpBuffer;
}
_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//LegalCopyright",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion = lpBuffer;
}
_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//ProductVersion",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion = lpBuffer;
}
_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//FileDescription",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion = lpBuffer;
}
_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//FileVersion",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion = lpBuffer;
}
_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//PrivateBuild",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion = lpBuffer;
}
_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//OriginalFilename",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion = lpBuffer;
}
delete[] pBuffer;
return ;
}