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