/**********获取、显示版本信息 开始*****************/
TCHAR* fileName =_T("//Windows//NOTES.EXE"); //指定要获取信息的文件路径
TCHAR *productVersion; //用于存放产品版本号
TCHAR SubBlock[100]; //用于存放要查询的信息名称,相当于数据库中要查询的某个属性名
unsigned int productVersionLen;//用于存放获取的产品版本号的长度
unsigned int cbTranslate;//用于存放文件的language and code pages的大小,这是信息版本的必要子项
DWORD versionSize;//文件版本的全部信息的大小
获取文件版本的全部信息的大小,开始
if((versionSize = GetFileVersionInfoSize(fileName,NULL))==0)
{
return;
}
获取文件版本的全部信息的大小,结束
LPVOID versionInfo = new DWORD[versionSize]; //为versionInfo 分配存储空间
//获取文件版本的全部信息,开始/
if(GetFileVersionInfo(fileName,NULL,versionSize,versionInfo)==0)
{
return;
}
//获取文件版本的全部信息,结束/
//定义language and code page结构体,方便查询
struct LANGANDCODEPAGE
{
WORD wLanguage;
WORD wCodePage;
} *lpTranslate; //指向结构体的指针
.
memset(SubBlock,'0',sizeof(SubBlock));//清空内存
//获取文件的language and code pages,保存在lpTranslate结构体中,开始//
VerQueryValue(versionInfo,
TEXT("//VarFileInfo//Translation"),
(LPVOID*)&lpTranslate,
&cbTranslate);
//获取文件的language and code pages,保存在lpTranslate结构体中,结束//
/****************************获取ProductVersion,开始****************/
//设置具体要获取的信息的名称,用SubBlock存储//
wsprintf( SubBlock,
TEXT("//StringFileInfo//%04x%04x//ProductVersion"),
lpTranslate->wLanguage,
lpTranslate->wCodePage);
//获取ProductVersion,保存在productVersion中//
VerQueryValue(versionInfo,
SubBlock,
(LPVOID*)&productVersion,
&productVersionLen);
/**********************获取ProductVersion,结束******************/
delete[] versionInfo;
delete lpTranslate;
MessageBox(productVersion,_T("ProductVersion"),MB_OK);
/**********获取、显示版本信息 开始*****************/
本程序只获得了版本信息中的ProductVersion子项,同理可获得其他子项。