QT用API获得文件的版本信息
2015-09-21 15:04
477 查看
http://www.thinksaas.cn/group/topic/87160/
#include<windows.h> #include<winver.h> ///引入Version.lib库 QString InfomationCollect::GetFileVertion( QString fullName ) { DWORD dwLen = 0; char* lpData=NULL; BOOL bSuccess = FALSE; QString fileInfomation; //获得文件基础信息 //-------------------------------------------------------- dwLen = GetFileVersionInfoSize(fullName.toStdWString().c_str(), 0); if (0 == dwLen) { //qDebug()<<"Get file verstion error!"; return""; } lpData =new char [dwLen+1]; bSuccess = GetFileVersionInfo(fullName.toStdWString().c_str(), 0, dwLen, lpData); if (!bSuccess) { //qDebug()<<"Get file verstion error!"; delete lpData; return""; } LPVOID lpBuffer = NULL; UINT uLen = 0; //获得语言和代码页(language and code page) //--------------------------------------------------- bSuccess = VerQueryValue(lpData, (TEXT("\VarFileInfo\Translation")), &lpBuffer, &uLen); QString strTranslation,str1,str2; unsigned short int *p =(unsigned short int *)lpBuffer; str1.setNum(*p,16); str1="000"+ str1; strTranslation+= str1.mid(str1.size()-4,4); str2.setNum(*(++p),16); str2="000"+ str2; strTranslation+= str2.mid(str2.size()-4,4); //获得文件版本信息 //----------------------------------------------------- QString code ="\StringFileInfo\"+ strTranslation +"\FileVersion"; bSuccess = VerQueryValue(lpData, (code.toStdWString().c_str()), &lpBuffer, &uLen); if (!bSuccess) { //qDebug()<<"Get file verstion error!"; delete lpData; return""; } fileInfomation += QString::fromUtf16((const unsigned short int *)lpBuffer); //获得文件的描述 //--------------------------------------------------------- /*code ="\StringFileInfo\"+ strTranslation +"\FileDescription"; bSuccess = VerQueryValue(lpData, (code.toStdWString().c_str()), &lpBuffer, &uLen); if (!bSuccess) { qDebug()<<"Get file verstion error!"; delete lpData; return""; } fileInfomation +="^"; fileInfomation += QString::fromUtf16((const unsigned short int *)lpBuffer);*/ delete [] lpData;//此处不需要释放 return fileInfomation; } //================================================== //VC版本 char* szFileName = “C:\EnochShen.exe”; DWORD dwSize = GetFileVersionInfoSize(szFileName,NULL); LPVOID pBlock = malloc(dwSize); GetFileVersionInfo(szFileName,0,dwSize,pBlock); char* pVerValue = NULL; UINT nSize = 0; VerQueryValue(pBlock,TEXT(“\VarFileInfo\Translation”), (LPVOID*)&pVerValue,&nSize); CString strSubBlock,strTranslation,strTemp; strTemp.Format(“000%x”,*((unsigned short int *)pVerValue)); strTranslation = strTemp.Right(4); strTemp.Format(“000%x”,*((unsigned short int *)&pVerValue[2])); strTranslation += strTemp.Right(4); //080404b0为中文,040904E4为英文 //文件描述 strSubBlock.Format(“\StringFileInfo\%s\FileDescription”,strTranslation); VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize); strSubBlock.ReleaseBuffer(); strTemp.Format(“文件描述: %s”,pVerValue); AfxMessageBox(strTemp); //内部名称 strSubBlock.Format(“\StringFileInfo\%s\InternalName”,strTranslation); VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize); strSubBlock.ReleaseBuffer(); strTemp.Format(“文件描述: %s”,pVerValue); AfxMessageBox(strTemp); //合法版权 strSubBlock.Format(“\StringFileInfo\%s\LegalTradeMarks”,strTranslation); VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize); strSubBlock.ReleaseBuffer(); strTemp.Format(“合法版权: %s”,pVerValue); AfxMessageBox(strTemp); //原始文件名 strSubBlock.Format(“\StringFileInfo\%s\OriginalFileName”,strTranslation); VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize); strSubBlock.ReleaseBuffer(); strTemp.Format(“原始文件名: %s”,pVerValue); AfxMessageBox(strTemp); //产品名称 strSubBlock.Format(“\StringFileInfo\%s\ProductName”,strTranslation); VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize); strSubBlock.ReleaseBuffer(); strTemp.Format(“产品名称: %s”,pVerValue); AfxMessageBox(strTemp); //产品版本 strSubBlock.Format(“\StringFileInfo\%s\ProductVersion”,strTranslation); VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize); strSubBlock.ReleaseBuffer(); strTemp.Format(“产品版本: %s”,pVerValue); AfxMessageBox(strTemp); free(pBlock);
相关文章推荐
- Qt在windows与Mac OS中获取执行程序版本号
- qt使用记录
- 【QT】QT信号槽初实现
- Qt字符串区分大小写和全词匹配问题
- QT安装
- 在Qt Creator中配置QNX设备
- 安装QNX的Qt开发框架(QDF)
- 在Qt Creator中配置QNX编译工具链
- Qt getOpenFileName函数使用详解
- qt使用gsoap调用webservice接口
- Qt Creater error: LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Ubuntu Server下Qt的MySql驱动问题
- ubuntu server开机运行Qt图形界面程序
- qt开发----小白的成长伊始
- Qt简略总结
- QT多线程详解
- QT 与 MFC 的区别
- QT 打开文件对话框汇总
- PyQt5资料
- 在树莓派上安装PyQt4