vc++读取文件属性的详细信息描述 通过读取QQ的注册表和EXE路径两种方式

时间:2021-04-17 00:20:52

转载:http://www.cnblogs.com/pythonschool/archive/2012/10/18/2729872.html

// File: GetFileVersion.cpp
// Description: 获取EXE文件的属性详细信息
// Created: 2017-9-5////////////////////////////////////////////////////////////// /*
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 <windows.h>
#include <tchar.h>
#include <string>
#include <iostream>
#include "stdio.h" #pragma comment(lib, "version.lib")
using namespace std; std::string GetFileVersion(char * strFilePath)
{
DWORD dwSize;
DWORD dwRtn;
std::string szVersion;
//获取版本信息大小
dwSize = GetFileVersionInfoSize(strFilePath,NULL);
if (dwSize == )
{
return "";
}
char *pBuf;
pBuf= new char[dwSize + ];
if(pBuf == NULL)
return "";
memset(pBuf, , dwSize + );
//获取版本信息
dwRtn = GetFileVersionInfo(strFilePath,NULL, dwSize, pBuf);
if(dwRtn == )
{
return "";
}
LPVOID lpBuffer = NULL;
UINT uLen = ;
//版本资源中获取信息 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 == )
{
return "";
}
szVersion = (char*)lpBuffer;
delete pBuf;
return szVersion;
} void main()
{
#define MY_BUFSIZE 500
HKEY hKey;
TCHAR szProductType[MY_BUFSIZE];
DWORD dwBufLen = MY_BUFSIZE;
LONG lRet; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Tencent\\PlatForm_Type_List\\3"),
,
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) << endl;
getchar();
}

注:工程默认是多字节编码