//
//
//File: getfileversion.cpp//Description: 获取EXE文件的属性详细信息//Created: 2012-10-18//Author:pythonschool.com
/*The following code shows how to get FILEINFO value from resource file.
These WIN32 functions will be used:
* GetFileVersionInfo
* GetFileVersionInfoSize
* VerQueryValue
* GetModuleFileName*/#include"stdafx.h"#include#include#include#include#include"stdio.h"
#pragma comment(lib, "version.lib")
using namespacestd;
std::string GetFileVersion(char *strFilePath)
{
DWORD dwSize;
DWORD dwRtn;
std::stringszVersion;//获取版本信息大小
dwSize =GetFileVersionInfoSize(strFilePath,NULL);if (dwSize == 0)
{return "";
}char *pBuf;
pBuf= new char[dwSize + 1];if(pBuf ==NULL)return "";
memset(pBuf,0, dwSize + 1);//获取版本信息
dwRtn =GetFileVersionInfo(strFilePath,NULL, dwSize, pBuf);if(dwRtn == 0)
{return "";
}
LPVOID lpBuffer=NULL;
UINT uLen= 0;//版本资源中获取信息
dwRtn=VerQueryValue(pBuf,
TEXT("\\StringFileInfo\\080404b0\\FileDescription"), //0804中文//04b0即1252,ANSI//可以从ResourceView中的Version中BlockHeader中看到//可以测试的属性
/*CompanyName
FileDescription
FileVersion
InternalName
LegalCopyright
OriginalFilename
ProductName
ProductVersion
Comments
LegalTrademarks
PrivateBuild
SpecialBuild*/
&lpBuffer,&uLen);if(dwRtn == 0)
{return "";
}
szVersion= (char*)lpBuffer;
delete pBuf;returnszVersion;
}voidmain()
{#define MY_BUFSIZE 500HKEY hKey;
TCHAR szProductType[MY_BUFSIZE];
DWORD dwBufLen=MY_BUFSIZE;
LONG lRet;if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Tencent\\PlatForm_Type_List\\3"),0,
KEY_QUERY_VALUE,&hKey) ==ERROR_SUCCESS)
{
lRet=RegQueryValueEx(hKey,
TEXT("TypePath"),
NULL,
NULL,
(LPBYTE)szProductType,&dwBufLen);//return szProductType;
}
RegCloseKey(hKey);//char * strFilePath = "C:\\Program Files\\Tencent\\QQ\\Bin\\QQ.exe";
char * strFilePath =szProductType;
cout<< strFilePath << "FileDescription is:" << GetFileVersion(strFilePath) <
getchar();
}