您的位置:首页 > 其它

修改版本信息

2011-01-23 08:32 148 查看
CHAR szAppPath[ MAX_PATH ] = { 0 };
::GetModuleFileName( NULL, szAppPath, MAX_PATH );
INT nVersionLen = ::GetFileVersionInfoSize( szAppPath, NULL );
if ( nVersionLen <= 0 )
{
return FALSE;
}

CHAR* pBuffer = new CHAR[ nVersionLen ];
if ( !pBuffer )
{
return FALSE;
}

if ( !::GetFileVersionInfo( szAppPath, NULL, nVersionLen, pBuffer ) )
{
return FALSE;
}

// 为了方便访问。
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];

_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//Comments ",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion.strComment = lpBuffer;
}

_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//InternalName ",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion.strInternalName = lpBuffer;
}

_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//ProductName ",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion.strProductName = lpBuffer;
}

_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//CompanyName ",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion.strCompanyName = lpBuffer;
}

_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//LegalCopyright ",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion.strLegalCopyRight = lpBuffer;
}

_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//ProductVersion ",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion.strProductVersion = lpBuffer;
}

_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//FileDescription ",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion.strFileDescription = lpBuffer;
}

_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//FileVersion ",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion.strFileVersion = lpBuffer;
}

_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//PrivateBuild ",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion.strPrivateBuild = lpBuffer;
}

_snprintf( szSubBlock, 256, "//StringFileInfo//%04x%04x//OriginalFilename ",
lpTranslate[0].wLanguage, lpTranslate[0].wCodePage );
if( ::VerQueryValue( pBuffer, szSubBlock, ( LPVOID* )&lpBuffer, &dwBytes ) )
{
m_stAppVersion.strOriginalFilename = lpBuffer;
}

delete[] pBuffer;
return TRUE;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: