首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C++Builder 取得程式版本號:GetFileVersionInfo 完整實作

     編輯:VC 教學

核心函式


AnsiString __fastcall TForm1::GetFileVersion(AnsiString FileName)
{
    AnsiString asVer = "";
    DWORD dwHandle = 0;
    UINT iVerInfoSize = GetFileVersionInfoSize(FileName.c_str(), &dwHandle);

    if (iVerInfoSize) {
        char *pBuf = new char[iVerInfoSize];
        if (GetFileVersionInfo(FileName.c_str(), 0, iVerInfoSize, pBuf)) {
            VS_FIXEDFILEINFO *pVsInfo;
            UINT iFileInfoSize = sizeof(VS_FIXEDFILEINFO);
            if (VerQueryValue(pBuf, "\\", (void**)&pVsInfo, &iFileInfoSize)) {
                asVer = IntToStr(HIWORD(pVsInfo->dwFileVersionMS)) + "." +
                        IntToStr(LOWORD(pVsInfo->dwFileVersionMS)) + "." +
                        IntToStr(HIWORD(pVsInfo->dwFileVersionLS)) + "." +
                        IntToStr(LOWORD(pVsInfo->dwFileVersionLS));
            }
        }
        delete[] pBuf;
    }
    return asVer;
}

關鍵點

  1. GetFileVersionInfoSize 取得資源大小。
  2. GetFileVersionInfo 讀入緩衝區。
  3. VerQueryValue(pBuf, "\\", ...) 取得固定版本資訊結構 VS_FIXEDFILEINFO。
  4. 版本號由四個 16-bit 組成:MS 高/低字、LS 高/低字。

擴充:取得其他版本資源字串

將 `VerQueryValue` 第二參數改為 `"\\StringFileInfo\\040904B0\\CompanyName"` 等,可取得公司名、檔案說明、版權等資訊(需先查詢 `\\VarFileInfo\\Translation` 取得語言/代碼頁組合)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved