获取程序版本号

获取程序版本号

// include <windows.h>
// include <winver.h>

// method 1.
// get version from file name.
bool func_a(const char *pfile_name)
{
    bool bret = false;
    unsigned long isize = GetFileVersionInfoSize(pfile_name,NULL);
    if(isize == 0)
	return false;
    VS_FIXEDFILEINFO *pvs_ffi = NULL;
    unsigned int ilen = 0;
    unsigned char *pbuf = new unsigned char [isize];
    if(pbuf == NULL)
	return false;
    memset(pbuf,0,isize);
    if(!GetFileVersionInfo(pfile_name,NULL,isize,pbuf) )
    {
	delete [] pbuf;
        return false;
    }
    if(VerQueryValue(pbuf,"\\",(void **)&pvs_ffi,&ilen))
    {
        cout<<"version: "
            <<HIWORD(pvs_ffi->dwFileVersionMS)<<"."
            <<LOWORD(pvs_ffi->dwFileVersionMS)<<"."
            <<HIWORD(pvs_ffi->dwFileVersionLS)<<"."
            <<LOWORD(pvs_ffi->dwFileVersionLS)<<endl;
        bret = true;
    }
    delete [] pbuf;
    return bret;
}

//struct VS_VERSIONINFO
//{
//    WORD  wLength; 
//    WORD  wValueLength; 
//    WORD  wType; 
//    WCHAR szKey[16];//contains a unicode string L"VS_VERSION_INFO".
//    WORD  Padding1[0]; 
//    VS_FIXEDFILEINFO Value; 
//    WORD  Padding2[0]; 
//    WORD  Children[0]; 
//};

// method 2.
// get version from resource.
bool func_b(void)
{
    VS_FIXEDFILEINFO *pvs_ffi = NULL;
    HMODULE hmdl = GetModuleHandle(NULL);
    HRSRC hrsrc = FindResource(hmdl,MAKEINTRESOURCE(VS_VERSION_INFO),RT_VERSION);
    if(hrsrc == NULL)
        return false;
    HGLOBAL hgbl = LoadResource(hmdl,hrsrc);
    if(hgbl == NULL)
        return false;
    unsigned char *pbuf = (unsigned char *)LockResource(hgbl);
    if(pbuf == NULL)
        return false;
    pvs_ffi = (VS_FIXEDFILEINFO *)( pbuf + (sizeof(WORD) *3) + sizeof(L"VS_VERSION_INFO") + (sizeof(WORD) *1) );

    cout<<"version: "
        <<HIWORD(pvs_ffi->dwFileVersionMS)<<"."
        <<LOWORD(pvs_ffi->dwFileVersionMS)<<"."
        <<HIWORD(pvs_ffi->dwFileVersionLS)<<"."
        <<LOWORD(pvs_ffi->dwFileVersionLS)<<endl;
    return true;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值