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