利用GetFileVersionInfoSize, GetFileVersionInfo, VerQueryValue這三個API來取得檔案的Version資訊
首先取得執行程式的位置
// get the app path
TCHAR apppath[MAX_PATH]={0};
GetModuleFileName(AfxGetInstanceHandle(),apppath,MAX_PATH-1);
CString csAppPath(apppath);
int nPos = csAppPath.ReverseFind('\\');
csAppPath = csAppPath.Left(nPos + 1);
csAppPath += _T("my.exe");
取得版本資訊
// get version
DWORD dwLen = 0;
TCHAR* lpData=NULL;
BOOL bSuccess = FALSE;
dwLen = GetFileVersionInfoSize(csAppPath, 0);
if (0 == dwLen)
{
return ;
}
lpData =new TCHAR [dwLen+1];
GetFileVersionInfo(csAppPath, 0, dwLen, lpData);
LPVOID lpBuffer = NULL;
UINT uLen = 0;
VerQueryValue(lpData,
_T("\\StringFileInfo\\040904b0\\FileVersion"),
//040904b0 can be found in resource view->version-> blockheader
/* properties for query 可以查詢的資訊
CompanyName
FileDescription
FileVersion
InternalName
LegalCopyright
OriginalFilename
ProductName
ProductVersion
Comments
LegalTrademarks
PrivateBuild
SpecialBuild
*/
&lpBuffer,
&uLen);
// lpBuffer存有查詢回來的資訊。
CString csVersion;
csVersion.Format(_T("%s"),(TCHAR*)lpBuffer);
m_csVersion += csVersion;
delete [] lpData;
// lpBuffer可以不用delete,因為他指向和lpData相同的記憶體空間
沒有留言:
張貼留言