刘华世的官方博客

C++语言 获取EXE文件的属性详细信息

//////////////////////////////////////////////////////////////
//
// 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 <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 == 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; 
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"),
  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) << endl;
 getchar();
}
posted @ 2012-11-10 22:09  pythonschool  阅读(5529)  评论(0编辑  收藏  举报
刘华世的官方博客