linux系统获取光盘信息api,QT用API获得文件的版本信息

#include

#include

///引入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()<

return "";

}

lpData =new char [dwLen+1];

bSuccess = GetFileVersionInfo(fullName.toStdWString().c_str(), 0, dwLen, lpData);

if (!bSuccess)

{

//qDebug()<

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()<

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()<

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);0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值