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;
}
GetFileVersionInfoSize 取得資源大小。GetFileVersionInfo 讀入緩衝區。VerQueryValue(pBuf, "\\", ...) 取得固定版本資訊結構 VS_FIXEDFILEINFO。MS 高/低字、LS 高/低字。將 `VerQueryValue` 第二參數改為 `"\\StringFileInfo\\040904B0\\CompanyName"` 等,可取得公司名、檔案說明、版權等資訊(需先查詢 `\\VarFileInfo\\Translation` 取得語言/代碼頁組合)。