#pragma comment(lib, "VERSION.LIB")<br />int CheckVersion(LPTSTR lpszFullPath, VS_FIXEDFILEINFO *pVerInfo)<br />{<br /> BOOL bRet = 0;</p><p> DWORD dwVerHnd;<br /> DWORD dwVerInfoSize = GetFileVersionInfoSize(lpszFullPath, &dwVerHnd);<br /> if (dwVerInfoSize)<br /> {<br /> HANDLE hMem;<br /> LPVOID lpvMem;<br /> BOOL fRet;<br /> UINT cchVer = 0;<br /> VS_FIXEDFILEINFO *vInfo;</p><p> hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);<br /> if(hMem)<br /> {<br /> lpvMem = GlobalLock(hMem);<br /> if(lpvMem)<br /> {<br /> GetFileVersionInfo(lpszFullPath, dwVerHnd, dwVerInfoSize, lpvMem);</p><p> fRet = VerQueryValue(lpvMem, TEXT("//"),<br /> (LPVOID*)&vInfo, &cchVer);<br /> memcpy(pVerInfo, vInfo, sizeof(VS_FIXEDFILEINFO));<br /> GlobalUnlock(lpvMem);<br /> bRet = 1;<br /> }<br /> GlobalFree(hMem);<br /> }<br /> }<br /> return 1;<br />}<br />
第二版本
#pragma comment(lib, "version.lib")<br />CString GetFileVersionInfoS(BOOL bShort = TRUE)<br />{<br /> CString SoftVersion = _T("");</p><p> TCHAR szFullPath[MAX_PATH+1] = {0};<br /> GetModuleFileName(NULL, szFullPath, MAX_PATH);</p><p> DWORD dwVerHnd = NULL;<br /> DWORD dwVerInfoSize = GetFileVersionInfoSize(szFullPath, &dwVerHnd);<br /> if(dwVerInfoSize)<br /> {<br /> LPBYTE lpvMem = new BYTE[dwVerInfoSize];<br /> memset(lpvMem, 0, dwVerInfoSize);</p><p> GetFileVersionInfo(szFullPath, dwVerHnd, dwVerInfoSize, lpvMem); </p><p> LPVOID lszVer = NULL;<br /> UINT cchVer = 0;<br /> if(VerQueryValue(lpvMem, _T("//"), &lszVer, &cchVer))<br /> {<br /> VS_FIXEDFILEINFO *pVerInfo = (VS_FIXEDFILEINFO*)lszVer;</p><p> SoftVersion.Format( _T("Version %d.%d.%d.%d "),<br /> HIWORD(pVerInfo->dwFileVersionMS), LOWORD(pVerInfo->dwFileVersionMS),<br /> HIWORD(pVerInfo->dwFileVersionLS), LOWORD(pVerInfo->dwFileVersionLS)); </p><p> SoftVersion += _T("(B");<br /> SoftVersion += __DATE__;<br /> if(!bShort)<br /> {<br /> SoftVersion += _T(" ");<br /> SoftVersion += __TIME__;<br /> }<br /> SoftVersion += _T(")");<br /> }</p><p> delete []lpvMem;<br /> }<br /> else<br /> {<br /> DWORD dwErr = GetLastError();<br /> ASSERT(0);<br /> }</p><p> return SoftVersion;<br />}