vc++读取文件属性的详细信息描述 读取QQ的注册表路径
////////////////////////////////////////////////////////////// // // File: getfileversion.cpp // Description: 获取EXE文件的属性详细信息 // Created: 2012-10-18 // Author: lhsbqb // ////////////////////////////////////////////////////////////// /* 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(); }
参考了msdn如下代码:
#define RTN_UNKNOWN 0 #define RTN_SERVER 1 #define RTN_WORKSTATION 2 #define RTN_NTAS 3 #define RTN_ERROR 13 DWORD GetWindowsVariant(void) { #define MY_BUFSIZE 32 // Arbitrary initial value. // Dynamic allocation will be used. HKEY hKey; TCHAR szProductType[MY_BUFSIZE]; DWORD dwBufLen = MY_BUFSIZE; LONG lRet; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\ProductOptions"), 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS) return RTN_ERROR; lRet = RegQueryValueEx(hKey, TEXT("ProductType"), NULL, NULL, (LPBYTE)szProductType, &dwBufLen); RegCloseKey(hKey); if(lRet != ERROR_SUCCESS) return RTN_ERROR; // check product options, in order of likelihood if(lstrcmpi(TEXT("WINNT"), szProductType) == 0) return RTN_WORKSTATION; if(lstrcmpi(TEXT("SERVERNT"), szProductType) == 0) return RTN_SERVER; if(lstrcmpi(TEXT("LANMANNT"), szProductType) == 0) return RTN_NTAS; // else return "unknown variant" code else return RTN_UNKNOWN; }
学习笔记转摘于:
丝酷网 http://www.pythonschool.com/