需要三个函数配合GetFileVersionInfoSize,GetFileVersionInfo,VerQueryValue。
1. 前两个函数的使用,为VerQueryValue做准备
DWORD dwInfoSize, dwHandle; dwInfoSize = ::GetFileVersionInfoSize(m_szAppFilePath, &dwHandle); BYTE* pData = new BYTE[dwInfoSize]; VERIFY(::GetFileVersionInfo(m_szAppFilePath, NULL, dwInfoSize, (LPVOID)pData));
2. 获取主次版本号
VERIFY(::VerQueryValue((LPCVOID)pData, _T("\\"), &lpBuffer, &uLength)); m_dwProductVersionMS = ((VS_FIXEDFILEINFO*)lpBuffer)->dwProductVersionMS; m_dwProductVersionLS = ((VS_FIXEDFILEINFO*)lpBuffer)->dwProductVersionLS;
3. 获取版权信息
VERIFY(::VerQueryValue((LPCVOID)pData, _T("\\StringFileInfo\\080404b0\\LegalCopyright"), CString szCopyright((LPCTSTR)lpBuffer, (int)uLength);
4. 获取产品名称
VERIFY(::VerQueryValue((LPCVOID)pData, _T("\\StringFileInfo\\080404b0\\ProductName"), CString szProductName((LPCTSTR)lpBuffer, (int)uLength);
5. 获取公司名称
VERIFY(::VerQueryValue((LPCVOID)pData, _T("\\StringFileInfo\\080404b0\\CompanyName"), CString szManufacture((LPCTSTR)lpBuffer, (int)uLength);
6.下面为系统性的解释
查询什么主要有VerQueryValue的第二个参数来控制,它的取值如下:
"\" 获取文件的VS_FIXEDFILEINFO结构 "\VarFileInfo\Translation" 获取文件的翻译表 "\StringFileInfo\languagecodepage\stringname" 获取文件的字串信息,languagecodepage指的是语言代码页【080404b0为中文,040904E4为英文】。
|