自ファイルのバージョン情報
// Product version string DWORD dwLen, dwBuf; DWORD* pdwCodePage; TCHAR szKey[256], szFile[_MAX_PATH]; TCHAR* pszProductVersion; _tcsncpy(szFile, szFileName, sizeof(szFile)); szFile[_MAX_PATH-1] = _T('\0'); dwLen = ::GetFileVersionInfoSize(szFile, &dwBuf); BYTE* pBuf = new BYTE[dwLen]; ::GetFileVersionInfo(szFile, 0, dwLen, pBuf); UINT uiBuf; ::VerQueryValue(pBuf, _T("\\VarFileInfo\\Translation"), (LPVOID*)&pdwCodePage, &uiBuf); _sntprintf(szKey, sizeof(szKey), _T("\\StringFileInfo\\%04x%04x\\ProductVersion"), LOWORD(*pdwCodePage), HIWORD(*pdwCodePage)); ::VerQueryValue(pBuf, szKey, (LPVOID*)&pszProductVersion, &uiBuf); // pszProductVersion がプロダクトバージョン // strcpy(sz, pszProductVersion); delete[] pBuf;
\StringFileInfo\%04x%04x\ProductVersion を変更するとさまざまな情報が得られる。ただし
バージョン情報がないファイルも多いので戻り値チェックは必須。
version.lib のリンクが必要。