//获取版本号
#pragma comment(lib,"Version.lib")
BOOL GetFileVersion(TCHAR * pFileName,TCHAR * pVersion)
{
if(pFileName == NULL || pVersion == NULL)
return FALSE;
DWORD dwVerSize;
DWORD dwHandle;
LPVOID pVerBuffer = NULL;
dwVerSize = GetFileVersionInfoSize(pFileName, &dwHandle);
if (dwVerSize == 0)
return FALSE;
pVerBuffer = new BYTE[dwVerSize+1];
if (GetFileVersionInfo(pFileName, 0, dwVerSize, pVerBuffer))
{
VS_FIXEDFILEINFO * pInfo = NULL;
unsigned int nInfoLen;
unsigned int cbTranslate = 0;
struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *lpTranslate;
TCHAR szVersionTmp[128] = {0};
BOOL bVerQuery = VerQueryValue(pVerBuffer, TEXT("\\VarFileInfo\\Translation"),(LPVOID*)&lpTranslate,&cbTranslate);
// Read the file description for each language and code page.
for( int i=0; i < (cbTranslate/sizeof(struct LANGANDCODEPAGE)); i++ )
{
char SubBlock[200];
wsprintf(SubBlock,
TEXT("\\StringFileInfo\\%04x%04x\\FileVersion"),
lpTranslate[i].wLanguage,
lpTranslate[i].wCodePage);
void *lpBuffer=NULL;
unsigned int dwBytes=0;
bVerQuery = VerQueryValue(pVerBuffer,
SubBlock,
&lpBuffer,
&dwBytes);
CString strTemp=(char *)lpBuffer;
strcat(szVersionTmp,strTemp);
}
if(bVerQuery)
{
strcpy(pVersion,szVersionTmp);
if(pVerBuffer != NULL)
{
delete []pVerBuffer;
}
return TRUE;
}
}
if(pVerBuffer != NULL)
{
delete []pVerBuffer;
}
return FALSE;
}
#pragma comment(lib,"Version.lib")
BOOL GetFileVersion(TCHAR * pFileName,TCHAR * pVersion)
{
if(pFileName == NULL || pVersion == NULL)
return FALSE;
DWORD dwVerSize;
DWORD dwHandle;
LPVOID pVerBuffer = NULL;
dwVerSize = GetFileVersionInfoSize(pFileName, &dwHandle);
if (dwVerSize == 0)
return FALSE;
pVerBuffer = new BYTE[dwVerSize+1];
if (GetFileVersionInfo(pFileName, 0, dwVerSize, pVerBuffer))
{
VS_FIXEDFILEINFO * pInfo = NULL;
unsigned int nInfoLen;
unsigned int cbTranslate = 0;
struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *lpTranslate;
TCHAR szVersionTmp[128] = {0};
BOOL bVerQuery = VerQueryValue(pVerBuffer, TEXT("\\VarFileInfo\\Translation"),(LPVOID*)&lpTranslate,&cbTranslate);
// Read the file description for each language and code page.
for( int i=0; i < (cbTranslate/sizeof(struct LANGANDCODEPAGE)); i++ )
{
char SubBlock[200];
wsprintf(SubBlock,
TEXT("\\StringFileInfo\\%04x%04x\\FileVersion"),
lpTranslate[i].wLanguage,
lpTranslate[i].wCodePage);
void *lpBuffer=NULL;
unsigned int dwBytes=0;
bVerQuery = VerQueryValue(pVerBuffer,
SubBlock,
&lpBuffer,
&dwBytes);
CString strTemp=(char *)lpBuffer;
strcat(szVersionTmp,strTemp);
}
if(bVerQuery)
{
strcpy(pVersion,szVersionTmp);
if(pVerBuffer != NULL)
{
delete []pVerBuffer;
}
return TRUE;
}
}
if(pVerBuffer != NULL)
{
delete []pVerBuffer;
}
return FALSE;
}