C++判断Office版本——转载
自:http://blog.csdn.net/lpc_china/article/details/18359145
主要原理:查询windows注册表microsoft office软件项的值来判断版本。
主要源码:
头文件:
1 #pragma once 2 #include <Windows.h> 3 #include <tchar.h> 4 5 class CJudgeOfficeVersion 6 { 7 public: 8 CJudgeOfficeVersion(); 9 ~CJudgeOfficeVersion(); 10 11 public: 12 BOOL JudgeVersion(OUT LPTSTR _lpVersion, IN DWORD _dwVersionBufferLen); 13 };
源码:
1 #include "JudgeOfficeVersion.h" 2 #include <strsafe.h> 3 4 /* 5 * 函数名称:CJudgeOfficeVersion 6 * 函数功能:构造函数 7 * 函数参数:无 8 * 函数返回:无 9 * 函数备注:无 10 * 编 写 人:刘鹏春 11 */ 12 CJudgeOfficeVersion::CJudgeOfficeVersion() 13 { 14 15 } 16 17 /* 18 * 函数名称:~CJudgeOfficeVersion 19 * 函数功能:析构函数 20 * 函数参数:无 21 * 函数返回:无 22 * 函数备注:无 23 * 编 写 人:刘鹏春 24 */ 25 CJudgeOfficeVersion::~CJudgeOfficeVersion() 26 { 27 28 } 29 30 /* 31 * 函数名称:JudgeVersion 32 * 函数功能:判断版本 33 * 函数参数:1字符指针;2指针长度; 34 * 函数返回:判断状态 35 * 函数备注:通过ProgID查找CLSID查询服务器中记录的Office版本信息 36 * 该代码源自:http://support.microsoft.com/kb/247985/zh-cn 37 * 编 写 人:刘鹏春 38 */ 39 BOOL CJudgeOfficeVersion::JudgeVersion(OUT LPTSTR _lpVersion, IN DWORD _dwVersionBufferLen) 40 { 41 HKEY hKey; 42 HKEY hSubKey; 43 LONG lResult = 0L; 44 45 TCHAR szValueName[128] = {_T("CurVer")}; 46 TCHAR szKey[128] = {_T("Excel.Application")}; 47 48 lResult = RegOpenKeyEx( 49 HKEY_CLASSES_ROOT, 50 szKey, 51 0, 52 KEY_ALL_ACCESS, 53 &hKey 54 ); 55 if (ERROR_SUCCESS != lResult) { 56 MessageBox(NULL, _T("Could not get CLSID from ProgID, Make sure ProgID is correct."), _T("提示"), MB_OK); 57 return FALSE; 58 } 59 60 lResult = RegOpenKeyEx( 61 hKey, 62 szValueName, 63 0, 64 KEY_ALL_ACCESS, 65 &hSubKey 66 ); 67 if (ERROR_SUCCESS != lResult) { 68 MessageBox(NULL, _T("Excel is registered, but no local server can be found!"), _T("提示"), MB_OK); 69 return FALSE; 70 } 71 72 lResult = RegQueryValueEx(hSubKey, NULL, NULL, NULL, (LPBYTE)_lpVersion, &_dwVersionBufferLen); 73 74 RegCloseKey(hSubKey); 75 RegCloseKey(hKey); 76 77 if (ERROR_SUCCESS != lResult) { 78 return FALSE; 79 } 80 81 PTCHAR pszVersionNumber = _tcsrchr(_lpVersion, _T('.')); 82 PTCHAR pVersion = (pszVersionNumber + 1); 83 INT nVersion = _ttoi(pVersion); 84 85 ZeroMemory(_lpVersion, _dwVersionBufferLen); 86 switch (nVersion) 87 { 88 case 0: 89 case 1: 90 case 2: 91 case 3: 92 case 5: 93 StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 95以前版本")); 94 break; 95 case 6: 96 StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 95")); 97 break; 98 case 8: 99 StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 97")); 100 break; 101 case 9: 102 StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 2000")); 103 break; 104 case 10: 105 StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office XP")); 106 break; 107 case 11: 108 StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 2003")); 109 break; 110 case 12: 111 StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 2007")); 112 break; 113 case 13: 114 case 14: 115 case 15: 116 StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 2010")); 117 break; 118 default: 119 StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Version 2010以后版本")); 120 } 121 122 return TRUE; 123 }
*注:此方法还是比较简答而且容易是实现的。
煮酒论英雄