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

    转载: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 == 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();
    }

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

  • 相关阅读:
    JWT
    JS中try catch的用法
    React高级
    React基础
    获取当前时间前面的时间
    nodeJs
    数组里的字符串数字与数字互转
    寒假学习(二)spark学习
    寒假学习(一)Web开发人员学习路线图
    如何使用GitHub上传本地项目(idea功能强大可直接提交)
  • 原文地址:https://www.cnblogs.com/chechen/p/7477129.html
Copyright © 2011-2022 走看看