z4none
2/19/2016 - 12:16 PM

get file version

get file version

//
AnsiString GetFileVersion(AnsiString Path)
{
    AnsiString asReturn;
    DWORD dwHandle,InfoSize;
    InfoSize = GetFileVersionInfoSize(Path.c_str(),&dwHandle);
    if(InfoSize == 0) return "";
    
    //将版本信息资源读入缓冲区
    char *InfoBuf = new char[InfoSize];
    GetFileVersionInfo(Path.c_str(),0,InfoSize,InfoBuf);
    //获得生成文件使用的代码页及字符集信息
    char *pInfoVal;
    unsigned int dwInfoValSize;
    VerQueryValue(InfoBuf,"\\VarFileInfo\\Translation",&((void *)pInfoVal),
        &dwInfoValSize);AnsiString V = "\\StringFileInfo\\"
        +IntToHex(*((unsigned short int *)pInfoVal),4)
        +IntToHex(*((unsigned short int *) &pInfoVal[2]),4)
        + "\\FileVersion";
    //获得具体的版本号
    VerQueryValue(InfoBuf, V.c_str(),&((void *)pInfoVal),&dwInfoValSize);
    asReturn = AnsiString(pInfoVal).
    SetLength(dwInfoValSize-1);
    delete InfoBuf;

    return(asReturn);
}