判断本机office安装版本的方法分享_C 语言

复制代码 代码如下:

#include "msword.h"
HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp,
     LPOLESTR ptName, int cArgs...)
{
 // Begin variable-argument list
 va_list marker;
 va_start(marker, cArgs);

 if (!pDisp)
 {
  _putws(L"NULL IDispatch passed to AutoWrap()");
  _exit(0);
  return E_INVALIDARG;
 }

 // Variables used
 DISPPARAMS dp = { NULL, NULL, 0, 0 };
 DISPID dispidNamed = DISPID_PROPERTYPUT;
 DISPID dispID;
 HRESULT hr;

 // Get DISPID for name passed
 hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);
 if (FAILED(hr))
 {
  wprintf(L"IDispatch::GetIDsOfNames(\"%s\") failed w/err 0x%08lx\n",
   ptName, hr);
  _exit(0);
  return hr;
 }

 // Allocate memory for arguments
 VARIANT *pArgs = new VARIANT[cArgs + 1];
 // Extract arguments...
 for(int i=0; i < cArgs; i++)
 {
  pArgs[i] = va_arg(marker, VARIANT);
 }

 // Build DISPPARAMS
 dp.cArgs = cArgs;
 dp.rgvarg = pArgs;

 // Handle special-case for property-puts
 if (autoType & DISPATCH_PROPERTYPUT)
 {
  dp.cNamedArgs = 1;
  dp.rgdispidNamedArgs = &dispidNamed;
 }

 // Make the call
 hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT,
  autoType, &dp, pvResult, NULL, NULL);
 if (FAILED(hr))
 {
  wprintf(L"IDispatch::Invoke(\"%s\"=%08lx) failed w/err 0x%08lx\n",
   ptName, dispID, hr);
  _exit(0);
  return hr;
 }

 // End variable-argument section
 va_end(marker);

 delete[] pArgs;

 return hr;
}

void Cwps_msword2013Dlg::OnBnClickedButton1()
{
 CString strAppName = OLESTR("word.application");
 bool bResult = false;
 IDispatch * wordApp;
 CLSID appClsid;
 if(S_OK == CLSIDFromProgID(strAppName, &appClsid))
 {
  if(S_OK == CoCreateInstance(appClsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&wordApp))
  {
   Word::_Application appWord;
   if(S_OK == wordApp->QueryInterface(IID_IDispatch, (void**)&appWord))
   {
    CString strVersion = _T("");
    strVersion = appWord.GetVersion();
    if(_ttoi(strVersion) >= 15.0)
    {
     bResult = true;
    }
   }

  }
  AutoWrap(DISPATCH_METHOD, NULL, wordApp, L"Quit", 0);
  wordApp->Release();
 }
 if(bResult)
  MessageBox(_T("ok"), _T("tip"));
 else
  MessageBox(_T("no"), _T("tip"));
 //return bResult;
}

时间: 2024-09-15 22:16:21

判断本机office安装版本的方法分享_C 语言的相关文章

C++程序检测内存泄漏的方法分享_C 语言

一.前言 在Linux平台上有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容易形成"统一"的标准.而在Windows平台,服务器和客户端开发人员惯用的调试方法有很大不同.下面结合我的实际经验,整理下常见定位内存泄漏的方法. 注意:我们的分析前提是Release版本,因为在Debug环境下,通过VLD这个库或者CRT库本身的内存泄漏检测函数能够分析出内存泄漏,相对而言比较简单.而服务器有很多问

使用钩子如何锁定键盘的方法分享_C 语言

复制代码 代码如下: #include #include //处理按键消息的过程函数LRESULT CALLBACK keyproc( int code,WPARAM wParam,LPARAM lParam ){return 1;//返回1可使键盘停止响应} main(int argc, char* argv[]){ SetWindowsHookEx(WH_KEYBOARD,keyproc,GetModuleHandle(NULL),0);//安装键盘钩子printf("\n\n\n程序将在1

FCKeditor 2.6.6在ASP中的安装及配置方法分享_网页编辑器

首先从FCKEditor官方下载最新的版本提供的下载地址 http://www.jb51.net/codes/21294.html 安装及配置方法:一.打开文件夹发现有许多文件对于ASP来说是用不到的:删除FCKEditor2.6.6中不必要的文件:解压缩FCKeditor_2.6.6.zip到你网站根目录 fckeditor文件夹中,同时把文件夹内带_的文件夹和文件一并删除:1.fckeditor目录下除editor目录.fckconfig.js.fckeditor.asp.fckeditor

Java判断本机IP地址类型的方法_java

复制代码 代码如下:    package net;  import java.net.*;  /*  *  getAddress方法和getHostAddress类似,它们的唯一区别是getHostAddress方法返回的是字符串形式的IP地址,  *  而getAddress方法返回的是byte数组形式的IP地址.  *  Java中byte类型的取值范围是-128?127.如果返回的IP地址的某个字节是大于127的整数,在byte数组中就是负数.  *  由于Java中没有无符号byte类

验证本机的excel版本的C#代码_C#教程

复制代码 代码如下: /// <summary> /// 安装的excel的版本,0为没有安装,大于1说明安装了多个. /// </summary> /// <returns></returns> public static List<string> ExcelVersion() { List<string> list = new List<string>(); List<string> lisemp = ne

PHP中判断变量为空的几种方法分享_php技巧

1. isset功能:判断变量是否被初始化  说明:它并不会判断变量是否为空,并且可以用来判断数组中元素是否被定义过  注意:当使用isset来判断数组元素是否被初始化过时,它的效率比array_key_exists高4倍左右 复制代码 代码如下: $a = '';$a['c'] = '';if (!isset($a)) echo '$a 未被初始化' . "";if (!isset($b)) echo '$b 未被初始化' . "";if (isset($a['c

Linux环境下段错误的产生原因及调试方法小结_C 语言

最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的"段错误"(Segmentation Fault).借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决. 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况.这里贴一个

解析bitmap处理海量数据及其实现方法分析_C 语言

[什么是Bit-map] 所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素.由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省. 如果说了这么多还没明白什么是Bit-map,那么我们来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复).那么我们就可以采用Bit-map的方法来达到排序的目的.要表示8个数,我们就只需要8个Bit(1Bytes),首先我们开辟1Byte的空间,将这些空间的所

VC++ 获取系统时间的方法汇总_C 语言

1.使用CTime类(获取系统当前时间,精确到秒) CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime();//获取系统日期 str=tm.Format("现在时间是%Y年%m月%d日 %X"); MessageBox(str,NULL,MB_OK); a,从CTimet中提取年月日时分秒 CTime t = CTime::GetCurrentTime(); int d=t.GetDay(); //获得几号 int y=t.