VC读取文件的文件版本号
来源:互联网 发布:杜兰特身体数据 编辑:程序博客网 时间:2024/05/16 06:44
#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);
- VC读取文件的文件版本号
- VC读取文件的文件版本号
- VC读取文件的文件版本号
- 如何读取文件的版本号
- 读取文件的版本号,例如dll文件
- VC获取文件版本号
- VC获取某文件的版本号
- VC 获取 exe 文件的版本号
- VC获取某文件的版本号
- 文件上传读取apk文件的 包名、版本号、图标
- 读取apk文件的 包名、版本号、图标
- SVN不能读取cruuent文件中正确的版本号
- 读取apk文件的 包名、版本号、图标
- 得到文件的版本号
- vc读取ini文件
- VC读取dat文件
- vc读取INI文件
- VC 读取XML文件
- IOS文件下载
- Java零零碎碎的笔记(二)
- 动态绑定/解绑控件变量和控件
- 透明层覆盖在另一层上,透明层在ie6下不能响应事件的解决
- IOS文件下载
- VC读取文件的文件版本号
- 【Linux Shell】shell命令读书笔记---第四章:通配符扩展
- Android 中的WiFi学习笔记(转载)----WIFI启动 代码流程走读---网络连接流程
- 三层交换机学习--三层表项精确匹配和最长匹配
- Load 和Activate 的区别
- Partitioning by Palindromes
- iPhone开发中经常用到的控件尺寸大集合
- UI设计原则
- CRM的客户数据模型:Siebel Party Data Model (VI)