• win32 获取文件版本、描述等信息


     1 std::string GetFIleDescription(TCHAR *file_path){
     2     std::string description = "";
     3 
     4     //获取版本信息大小
     5     DWORD dwSize = GetFileVersionInfoSize(file_path, NULL);
     6     if (dwSize > 0)    {
     7         TCHAR *pBuf = new TCHAR[dwSize + 1];
     8         memset(pBuf, 0, dwSize + 1);
     9         //获取版本信息
    10         GetFileVersionInfo(file_path, NULL, dwSize, pBuf);
    11 
    12         // Read the list of languages and code pages.
    13         LPVOID lpBuffer = NULL;
    14         UINT uLen = 0;
    15 
    16         UINT nQuerySize;
    17         DWORD* pTransTable;
    18         ::VerQueryValue(pBuf, "\VarFileInfo\Translation", (void **)&pTransTable, &nQuerySize);
    19         DWORD m_dwLangCharset = MAKELONG(HIWORD(pTransTable[0]), LOWORD(pTransTable[0]));
    20 
    21         TCHAR SubBlock[50] = { 0 };
    22         sprintf_s(SubBlock, 50, "\StringFileInfo\%08lx\FileDescription", m_dwLangCharset);
    23 
    24         VerQueryValue(pBuf, SubBlock, &lpBuffer, &uLen);
    25         if (uLen) description = (TCHAR*)lpBuffer;
    26         delete[]pBuf;
    27     }
    28 
    29     return description;
    30 }

    pBuf获取倒文件里版本信息内容,然后需要通过VerQueryValue函数去取对应内容。

    18行,19行是去文件版本信息里的编码(对应文件属性详细信息的语言项),SubBlock格式化成16进制,然后加上参数去取对应内容。

    示例里SubBlock格式化时填的是"FileDescription",即获取文件属性详细信息里的描述项。

    这里可选填以下参数:

    CompanyName
    FileDescription
    FileVersion
    InternalName
    LegalCopyright
    OriginalFilename
    ProductName
    ProductVersion
    Comments
    LegalTrademarks
    PrivateBuild
    SpecialBuild

    公司名称,文件描述,文件版本等信息都可以通过该方式获取。

    注意需要导入库文件,在头文件包含后加上#pragma comment(lib, "version.lib")

  • 相关阅读:
    Android笔记(adb命令--reboot loader)
    Android笔记(预安装APK)
    Linux驱动学习(编写一个最简单的模块)
    const关键字与指针
    C++函数重载遇到了函数默认参数情况
    uboot环境变量分析
    ftp服务
    Samba服务
    mariadb_2 单表的增删改查
    mariadb_1 数据库介绍及基本操作
  • 原文地址:https://www.cnblogs.com/yzhuang/p/13754332.html
Copyright © 2020-2023  润新知