自:http://blog.csdn.net/lpc_china/article/details/18359145

主要原理:查询windows注册表microsoft office软件项的值来判断版本。

主要源码:

头文件:

 #pragma once
#include <Windows.h>
#include <tchar.h> class CJudgeOfficeVersion
{
public:
CJudgeOfficeVersion();
~CJudgeOfficeVersion(); public:
BOOL JudgeVersion(OUT LPTSTR _lpVersion, IN DWORD _dwVersionBufferLen);
};

源码:

 #include "JudgeOfficeVersion.h"
#include <strsafe.h> /*
* 函数名称:CJudgeOfficeVersion
* 函数功能:构造函数
* 函数参数:无
* 函数返回:无
* 函数备注:无
* 编 写 人:刘鹏春
*/
CJudgeOfficeVersion::CJudgeOfficeVersion()
{ } /*
* 函数名称:~CJudgeOfficeVersion
* 函数功能:析构函数
* 函数参数:无
* 函数返回:无
* 函数备注:无
* 编 写 人:刘鹏春
*/
CJudgeOfficeVersion::~CJudgeOfficeVersion()
{ } /*
* 函数名称:JudgeVersion
* 函数功能:判断版本
* 函数参数:1字符指针;2指针长度;
* 函数返回:判断状态
* 函数备注:通过ProgID查找CLSID查询服务器中记录的Office版本信息
* 该代码源自:http://support.microsoft.com/kb/247985/zh-cn
* 编 写 人:刘鹏春
*/
BOOL CJudgeOfficeVersion::JudgeVersion(OUT LPTSTR _lpVersion, IN DWORD _dwVersionBufferLen)
{
HKEY hKey;
HKEY hSubKey;
LONG lResult = 0L; TCHAR szValueName[] = {_T("CurVer")};
TCHAR szKey[] = {_T("Excel.Application")}; lResult = RegOpenKeyEx(
HKEY_CLASSES_ROOT,
szKey,
,
KEY_ALL_ACCESS,
&hKey
);
if (ERROR_SUCCESS != lResult) {
MessageBox(NULL, _T("Could not get CLSID from ProgID, Make sure ProgID is correct."), _T("提示"), MB_OK);
return FALSE;
} lResult = RegOpenKeyEx(
hKey,
szValueName,
,
KEY_ALL_ACCESS,
&hSubKey
);
if (ERROR_SUCCESS != lResult) {
MessageBox(NULL, _T("Excel is registered, but no local server can be found!"), _T("提示"), MB_OK);
return FALSE;
} lResult = RegQueryValueEx(hSubKey, NULL, NULL, NULL, (LPBYTE)_lpVersion, &_dwVersionBufferLen); RegCloseKey(hSubKey);
RegCloseKey(hKey); if (ERROR_SUCCESS != lResult) {
return FALSE;
} PTCHAR pszVersionNumber = _tcsrchr(_lpVersion, _T('.'));
PTCHAR pVersion = (pszVersionNumber + );
INT nVersion = _ttoi(pVersion); ZeroMemory(_lpVersion, _dwVersionBufferLen);
switch (nVersion)
{
case :
case :
case :
case :
case :
StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 95以前版本"));
break;
case :
StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 95"));
break;
case :
StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 97"));
break;
case :
StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 2000"));
break;
case :
StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office XP"));
break;
case :
StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 2003"));
break;
case :
StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 2007"));
break;
case :
case :
case :
StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Office 2010"));
break;
default:
StringCchCopy(_lpVersion, _dwVersionBufferLen, _T("Version 2010以后版本"));
} return TRUE;
}

*注:此方法还是比较简答而且容易是实现的。

最新文章

  1. Django框架初入
  2. [DNS-BIND]网络初始化
  3. Ctrl+Scroll改变所有Editor的缩放比例 (Code::Blocks)
  4. 跨服务器之间的session共享
  5. 何修改WAMP中mysql默认空密码--转
  6. 将在本地创建的Git仓库push到Git@OSC
  7. js,jquery获取下拉框选中的option
  8. linux下多ISP的策略路由
  9. JS事件驱动机制
  10. ORACLE 基础知识积累
  11. 使用nodejs搭建服务器显示HTML页面
  12. JS模块化规范CommonJS,AMD,CMD
  13. Struct2 拦截器
  14. fedora19安装jdk
  15. 关于自动刷新CSS
  16. Chrome新的语言API,让您的浏览器说话
  17. POJ2187(旋转卡壳)
  18. 内功心法 -- java.util.ArrayList&lt;E&gt; (1)
  19. js创建xml对象
  20. VS访问不到TFS、VS连接TFS报TF30063

热门文章

  1. Tsinsen A1504. Book(王迪) 数论,贪心
  2. Ajax交互demo1
  3. 右下角显示提示窗口(New-Object,COM)
  4. 无法定位序数XX于动态链接库XX.dll的解决的方法
  5. hadoop错误java.io.IOException Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try
  6. cocos2d-x plist+wen使用
  7. 3 Ways of JDK Source Code Attachment in Eclipse---reference
  8. Android开发之使用广播监听网络状态变化
  9. 关于js中伪数组
  10. VIM中文乱码(_vimrc配置文件备份)