修改版本信息
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;
::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;
相关文章推荐
- 修改源码去除Squid版本信息
- svn 版本库信息修改
- 2017.06.26 笔记 MTK手机版本信息修改
- Linux/Ubuntu修改主机名及查看版本信息
- 如何在编译过程中或者程序运行过程中修改程序版本信息
- C# 修改EXE、DLL文件的版本、公司、描述等信息
- eclipse svn 版本信息增加修改日期
- 编译安装nginx并修改版本头信息
- QQ聊天之修改wince登录显示的版本信息合集
- 修改apache和php的http头版本信息的方法
- 市内移出版本2.0(1、一页显示15条。2、增加控制标志。3、打印表格时绑定的list的优化。4、保存迁出登记信息时根据业务流水号判断增加还是修改。5、统一管理常量)
- Oracle字符集的查看、修改和版本信息的查询
- android系统中“关于设备”中android版本和android安全补丁信息修改
- 修改资源或版本信息导致 error RC2135 链接错误
- 教大家修改Android手机的内核版本信息
- 修改PE文件版本信息(简单演示)
- 修改内核文件屏蔽nginx版本信息
- C# 获得程序集版本信息,文件修改日期,最后修改日期的类,IList 排序类
- linux内核编译时,修改内核版本信息
- C++外部程序修改exe文件属性信息的版本信息