AnsiString GetFileVer()
{//获取本程序版本号
DWORD dwHandle;
UINT unCurLen;
AnsiString strVer;
char lpFileVer[30]={0};
String strFileName=Application->ExeName;
DWORD dwVerLen=GetFileVersionInfoSize(strFileName.c_str(),&dwHandle);
strcpy(lpFileVer,"");
if(dwVerLen)
{
LPSTR lpData=new char[dwVerLen];
if(GetFileVersionInfo(strFileName.c_str(),0,dwVerLen,lpData))
{
PVSFixedFileInfo pvsFixFileInfo;
VerQueryValue(lpData,"\\",(void **)&pvsFixFileInfo,&unCurLen);
DWORD dwFileType=pvsFixFileInfo->dwFileType;
if((dwFileType==VFT_APP) || (dwFileType==VFT_DLL)||(dwFileType==VFT_VXD)||(dwFileType==VFT_STATIC_LIB))
{
PDWORD pdwBuffer;
UINT unVerLen;
String strLanguageCode;
//获取文件语言
if(VerQueryValue(lpData,TEXT("\\VarFileInfo\\Translation"),(void**)&pdwBuffer,&unVerLen))
{
WORD wLangID=LOWORD((DWORD)(*pdwBuffer));
WORD wLangSubID=HIWORD((DWORD)(*pdwBuffer));
strLanguageCode=String(IntToHex(wLangID,4))+String(IntToHex(wLangSubID,4));
}
PCHAR pcBuf;
String strTemp="\\StringFileInfo\\"+strLanguageCode+String("\\FileVersion");
if(VerQueryValue(lpData,strTemp.c_str(),(void **)&pcBuf,&unVerLen))
strcpy(lpFileVer,pcBuf);
strVer = lpFileVer;
//去掉分隔的小数点
//for(int i=strVer.Length();i>0;i--)
//{
// if(strVer[i] == '.')
// strVer.Delete(i,1);
//}
}
}
delete[] lpData;
}
return strVer;
}