分享

获取EXE版本信息 GetFileVersionInfo...

 灞河之滨 2021-01-08

需要三个函数配合GetFileVersionInfoSize,GetFileVersionInfo,VerQueryValue。

1.  前两个函数的使用,为VerQueryValue做准备

  1. DWORD dwInfoSize, dwHandle;
  2. dwInfoSize = ::GetFileVersionInfoSize(m_szAppFilePath, &dwHandle);
  3. if(dwInfoSize <= 0)
  4. ASSERT(FALSE);
  5. BYTE* pData = new BYTE[dwInfoSize];
  6. VERIFY(::GetFileVersionInfo(m_szAppFilePath, NULL,
  7. dwInfoSize, (LPVOID)pData));
2. 获取主次版本号
  1. VERIFY(::VerQueryValue((LPCVOID)pData, _T("\\"), &lpBuffer, &uLength));
  2. m_dwProductVersionMS = ((VS_FIXEDFILEINFO*)lpBuffer)->dwProductVersionMS;
  3. m_dwProductVersionLS = ((VS_FIXEDFILEINFO*)lpBuffer)->dwProductVersionLS;

3. 获取版权信息
  1. VERIFY(::VerQueryValue((LPCVOID)pData,
  2. _T("\\StringFileInfo\\080404b0\\LegalCopyright"),
  3. &lpBuffer, &uLength));
  4. CString szCopyright((LPCTSTR)lpBuffer, (int)uLength);

4. 获取产品名称
  1. VERIFY(::VerQueryValue((LPCVOID)pData,
  2. _T("\\StringFileInfo\\080404b0\\ProductName"),
  3. &lpBuffer, &uLength));
  4. CString szProductName((LPCTSTR)lpBuffer, (int)uLength);

5. 获取公司名称
  1. VERIFY(::VerQueryValue((LPCVOID)pData,
  2. _T("\\StringFileInfo\\080404b0\\CompanyName"),
  3. &lpBuffer, &uLength));
  4. CString szManufacture((LPCTSTR)lpBuffer, (int)uLength);

6.下面为系统性的解释

查询什么主要有VerQueryValue的第二个参数来控制,它的取值如下:

"\" 获取文件的VS_FIXEDFILEINFO结构
"\VarFileInfo\Translation" 获取文件的翻译表
"\StringFileInfo\languagecodepage\stringname" 获取文件的字串信息,languagecodepage指的是语言代码页【080404b0为中文,040904E4为英文】。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多