下面是一段用来获取某个文件的版本号的函数:
- #pragma comment (lib, "Version.lib")
- BOOL GetFileVersion(LPCTSTR strFile, CString& strVersion)
- {
- TCHAR szVersionBuffer[8192] = _T("");
- DWORD dwVerSize;
- DWORD dwHandle;
- dwVerSize = GetFileVersionInfoSize(strFile, &dwHandle);
- if (dwVerSize == 0)
- return FALSE;
- if (GetFileVersionInfo(strFile, 0, dwVerSize, szVersionBuffer))
- {
- VS_FIXEDFILEINFO * pInfo;
- unsigned int nInfoLen;
- if (VerQueryValue(szVersionBuffer, _T("//"), (void**)&pInfo, &nInfoLen))
- {
- strVersion.Format(_T("%d.%d.%d.%d"),
- HIWORD(pInfo->dwFileVersionMS), LOWORD(pInfo->dwFileVersionMS),
- HIWORD(pInfo->dwFileVersionLS), LOWORD(pInfo->dwFileVersionLS));
- return TRUE;
- }
- }
- return FALSE;
- }
上面这段函数可以灵活指定想要获取的PE文件的版本号,比如要获取注册表编辑器的版本号的话,那么:
- #include "MyFunction.h" //这个是上面那个函数所在的头文件
- void GerRegeditVer(void)
- {
- TChar strregfname[] = _T("C://Windows/regedit.exe");
- CString regver;
- GetFileVersion(strregfname, regver);
- MessageBox(regver); //这里弹出regedit.exe的版本号
- }
-------------------------------------------------------------------------------------
CString IS_GetAppVersion(char* AppName)
{
CString AppVersion;
//AppVersion=IS_GetAppCreateTime(AppName);
DWORD RessourceVersionInfoSize;
DWORD JustAJunkVariabel;
char* VersionInfoPtr;
struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *TranslationPtr;
char* InformationPtr;
UINT VersionInfoSize;
char VersionValue[255];
RessourceVersionInfoSize=GetFileVersionInfoSize(AppName,&JustAJunkVariabel);
if(0!=RessourceVersionInfoSize)
{
VersionInfoPtr=new char[RessourceVersionInfoSize];
if(GetFileVersionInfo(AppName,0,RessourceVersionInfoSize,VersionInfoPtr))
{
if(!VerQueryValue(
VersionInfoPtr,
TEXT("VarFileInfo//Translation"),
(LPVOID*)&TranslationPtr,
&VersionInfoSize))
{
delete[] VersionInfoPtr;
return AppVersion;
}
}
// retrieve File Description
wsprintf(VersionValue,
TEXT("//StringFileInfo//%04x%04x//FileVersion"),
TranslationPtr[0].wLanguage,
TranslationPtr[0].wCodePage);
if(!VerQueryValue(
VersionInfoPtr,
VersionValue,
(LPVOID*)&InformationPtr,
&VersionInfoSize))
{
delete[] VersionInfoPtr;
return AppVersion;
}
if(strlen(InformationPtr)>0) //Not Null
{
AppVersion=CString(InformationPtr);
}
delete[] VersionInfoPtr;
}
return AppVersion;
}
notepad.exe也可以得到