自: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;
}

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

C++判断Office版本——转载的更多相关文章

  1. 获取Windows平台下 安装office 版本位数信息

    最近在处理客户端安装程序过程,有一个需求:需要检测Windows平台下安装office 版本信息以及获取使用的office是32 位还是64 位: 当检测出office 位数为64位时,提示当前off ...

  2. powershell 判断操作系统版本 命令

    powershell 传教士 原创文章.始于 2015-12-15 允许转载,但必须保留名字和出处,否则追究法律责任 一 前言 判断操作系统版本,是个老话题,bat.vbs中都有例子,这本不是重要问题 ...

  3. 如何判断Office是32位还是64位?

    对于持续学习VBA的老铁们,有必要了解Office的位数. 如果系统是32位的,则不需要判断Office位数了,因为只能安装32位Office. 下面只讨论64位系统中,Office的位数判断问题. ...

  4. HMTL判断ie版本

    html判断IE版本 1. <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> 2. <!--[if IE]> ...

  5. js实现判断浏览器版本

    //判断浏览器版本是否过低 var ua = navigator.userAgent.toLowerCase(); if (window.ActiveXObject) var IEversion = ...

  6. Office版本差别引发的语法问题

    由于没有源代码,今天反编译了一个基于.NET的dll类库,再次遇到office版本差异问题,所以把它记录下来. 在反编译时,需要Aspose.Cells 5.3.1(Aspose是一套.NET类库,其 ...

  7. vc 取windows系统信息 版本 cpu信息 内存信息 ie版本信息 office版本

    头文件: /*! Copyright (C) *---------------------------------------------------------------------------- ...

  8. html判断IE版本

    html判断IE版本 . <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> . <!--[if IE]> ...

  9. jquery判断浏览器版本插件,jquery-browser.js

    jquery判断浏览器版本插件,jquery-browser.js,jquery 判断是否为ie浏览器插件 >>>>>>>>>>>&g ...

随机推荐

  1. Ruby 程序员最要好的朋友

    Ruby 是... 一种跨平台.面向对象的动态类型编程语言.Ruby 体现了表达的一致性和简单性, 它不仅是一门编程语言,更是表达想法的一种简练方式. https://www.ruby-lang.or ...

  2. .net 加水印 图片变大很多 解决方法

    /// 给图片加水印 中国红木网          /// </summary>         /// <param name="originalImg"> ...

  3. ubuntu遇到包依赖问题出错的解决方法

    更新时遇到了libc6包依赖错误,甚至“sudo apt-get -f install“也会报错, 这时候可以使用下列命令删除包后重新安装dpkg -r --force-all 包名称 然后再sudo ...

  4. OGG问题 ORA-01403的处理办法

    认识logdump分析工具及常用命令:http://book.51cto.com/art/201202/319253.htm http://www.killdb.com/2012/09/01/gold ...

  5. s3c6410 linux gadget hid驱动

    s3c6410 linux gadget hid驱动调了我一个多星期了今天终于搞定了,来跟大家分享下. 上一个星期纠结了一个星期的寄存器,试了N次,不管把3.1和3.7的hid驱动移植过来也是一样的情 ...

  6. FolderBrowserDialog

     FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();             folderBrowserDial ...

  7. IOS 整理

    防止程序进入休眠状态 设置应用程序的 idleTimerDisabled 属性为 YES (默认为NO) [UIApplication sharedApplication].idleTimerDisa ...

  8. Servlet 工作原理解析--转载

    原文:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.html?ca=drs- Web 技术成为当今主流的互联网 Web 应用 ...

  9. j2ee学习笔记 Filter过滤器

    作用:过滤response和request对象的内容 使用: Filter是J2EE的一个接口,自定义Filter需要实现该接口,并重写所有的方法. Filter提供的方法: init() doFil ...

  10. PHP表单验证内容是否为空

    内容为空效果图为: 填写内容效果图: 下面是验证程序的代码: <!doctype html> <html> <head> <meta http-equiv=& ...