获取文件版本信息

时间:2021-02-08 14:01:56

mark一下

char*   szFileName   =   "C:\\windows\\system32\\cmd.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为英文

MessageBox(strTranslation);

//文件描述
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);

//版权
strSubBlock.Format("\\StringFileInfo\\%s\\LegalCopyright",strTranslation);
VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize);
strSubBlock.ReleaseBuffer();
strTemp.Format("版权: %s ",pVerValue);
AfxMessageBox(strTemp);

//公司名
strSubBlock.Format("\\StringFileInfo\\%s\\CompanyName",strTranslation);
VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize);
strSubBlock.ReleaseBuffer();
strTemp.Format("公司名: %s ",pVerValue);
AfxMessageBox(strTemp);

free(pBlock);