现在的位置: 首页 > 综合 > 正文

FAQ200412:得到指定文件的信息

2013年08月22日 ⁄ 综合 ⁄ 共 2136字 ⁄ 字号 评论关闭
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);

抱歉!评论已关闭.