参考 获取运行中的Word对象:https://blog.csdn.net/seker_2006/article/details/1335702

PPT在CreateDispatch _T("Word.Application")可以直接使用获取当前文档,word和excel不能获取当前激活文档,需要采用以下两种方式。

1.使用AccessibleObjectFromWindow function

这里说明word的主窗口是OpusApp,_WwG是文本窗口,

#include "oleacc.h"
#pragma comment(lib,"Oleacc.lib")
HWND _hwndWwG=NULL;
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
{TCHAR _className[MAX_PATH]={NULL};GetClassNameW(hwndChild ,_className, MAX_PATH);TRACE("\t\n");TRACE(_className);//AfxMessageBox(_className);if(_tcscmp((TCHAR *)lParam,_className)==0) {TRACE(_className);AfxMessageBox(_className);_hwndWwG=hwndChild;}return true;
}void CwordDlg::OnBnClickedButton1()
{CApplication m_wdApp;CComPtr<IDispatch> spDisp;//获取Word的Window对象的智能指针CWindows m_Win;//定义Word的Windows对象  HWND hwndWord=::FindWindowW(_T("OpusApp"),NULL);EnumChildWindows(hwndWord, EnumChildProc, (LPARAM) _T("_WwG"));while(_hwndWwG==NULL){EnumChildWindows(hwndWord, EnumChildProc,(LPARAM) _T("_WwG"));hwndWord = ::GetNextWindow(hwndWord, GW_HWNDNEXT);if(hwndWord==NULL){AfxMessageBox(_T("没有找到打开的wps!"));return;}}HRESULT _result;_result = AccessibleObjectFromWindow( _hwndWwG, OBJID_NATIVEOM, IID_IDispatch, (void**) &spDisp);if(_result != S_OK){AfxMessageBox(_T("AccessibleObjectFromWindow FALSE"));return;}//hwnd就是需要获取的窗口句柄 m_Win.AttachDispatch(spDisp);//成功了 m_wdApp.AttachDispatch(m_Win.get_Application());//m_App是Word的应用程序对象//CWindow0 _window0= m_wdApp.get_ActiveWindow();CDocument0 _docment0=m_wdApp.get_ActiveDocument();CShapes _shapes=_docment0.get_Shapes();CnlineShapes m_wdInlineShapes;CnlineShape m_wdInlineShape;m_wdInlineShapes=_docment0.get_InlineShapes();COleVariant vTrue((short)TRUE),    vFalse((short)FALSE),vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//需要指定位置_shapes.AddPicture(_T("C:\\1.png"),vFalse,vTrue,COleVariant((long)1),COleVariant((long)1),COleVariant((long)100),COleVariant((long)100),vOptional);//自动在光标开始处插入//InlineShapes.AddPicture(_T("c:\\1.png"),vFalse,vTrue,vOptional);m_wdApp.DetachDispatch( );m_Win.DetachDispatch( );if(m_wdInlineShape)m_wdInlineShape.ReleaseDispatch();if(_shapes)_shapes.ReleaseDispatch();if(_docment0)_docment0.ReleaseDispatch();if(m_wdApp)m_wdApp.ReleaseDispatch();if(m_Win)m_Win.ReleaseDispatch();}

2.第二种方法

void CwordDlg::OnBnClickedButton2()
{CString strResult;// TODO: Add your dispatch handler code hereCLSID clsid;HRESULT hr;//here  is result 32bit longhr=::CLSIDFromProgID(L"Word.Application",&clsid);//通过progId取得clsIdif(FAILED(hr)){return  ;//如果没有安装word,则返回null}IUnknown *pUnknown=NULL;//com接口IDispatch *pDispatch=NULL;CApplication app=NULL;CSelection sel=NULL;hr=::GetActiveObject(clsid,NULL,&pUnknown);//查找是否有word程序运行if(FAILED(hr)){return  ;//如果没有运行word返回null}try{//获得运行word对象调用IUnknown接口的queryinterface方法,返回word对象hr=pUnknown->QueryInterface(IID_IDispatch,(LPVOID*)&app);if(FAILED(hr))throw (_T("没有取得iddispatchptr"));//释放IUnknown接口对象 pUnknown->Release();pUnknown=NULL;//通过app获得选区sel=app.get_Selection();if(!sel)throw (_T("没有正在编辑的文档"));COleVariant vTrue((short)TRUE),    vFalse((short)FALSE),vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);CnlineShapes m_wdInlineShapes;CnlineShape m_wdInlineShape;m_wdInlineShapes=sel.get_InlineShapes();m_wdInlineShape=m_wdInlineShapes.AddPicture(_T("c:\\1.png"),vFalse,vTrue,vOptional);//sel.WholeStory();//全部选择strResult=sel.get_Text();//取得文本}catch(LPCTSTR lpErr){CString s=lpErr;AfxMessageBox(s.AllocSysString()) ;}//释放资源if(pUnknown)pUnknown->Release();if(sel)sel.ReleaseDispatch();if(app)app.ReleaseDispatch();//返回取得的文档内容AfxMessageBox(strResult.AllocSysString());
}

获取运行中的Word,excel对象相关推荐

  1. 获取运行中的Word对象

    程序需要获取鼠标下已打开Word的内容,只要获取_Application的接口就可以了.搞了半天,终于知道使用AccessibleObjectFromWindow函数可以实现.MSDN上讲的不清楚,还 ...

  2. Android5.1.+ getRunningAppProcesses()获取运行中进程(第三方开源库)

    google可能为了安全考虑,在5.1.+后调用activitymanager.getRunningAppProcesses()方法只能返回你自己应用的进程,那如何在5.1.+后获取运行中进程呢?一个 ...

  3. Java中使用JCOM操作Word/Excel对象

    通过使用COM技术,我们用微软Office应用程序能够建立很多应用程序扩展,但是Java开发人员却无法享受它带来的便利--除非他们拥有方便的Java访问COM的途径(Java-to-COM桥).使用J ...

  4. 计算机右键无法新建excel2007,电脑桌面右键新建菜单中没有Word/Excel/PPT等文档怎么办?...

    很多朋友在安装好Office(2010或2013等)之后,发现右键新建中没有Word.Excel.PowerPoint等项,但是自己的Office却明明安装好了.这个时候该怎么办呢?这里,本文为大家提 ...

  5. word2013插入excel对象报错_修改Word文档中嵌入的Excel对象

    I need example code or even a 3rd party object that will allow me to get to an excel object embedded ...

  6. jsp页面中显示word/excel文档方法

    方法一 iframe直接引入excel文件 <form id="form1" runat="server"><iframe src=" ...

  7. 获取运行中的TeamViewer的账号和密码--中文版

    2019独角兽企业重金招聘Python工程师标准>>> #define WIN32_LEAN_AND_MEAN #include <windows.h> #include ...

  8. 编程获取Revit视图中的所有实例对象数量

    转载请复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/7678923 作者: 叶雄进, Autodesk ADN 问题: ...

  9. C++获取虚表中的函数并调用

    虚表的基本概念 在此链接中 https://blog.csdn.net/qq78442761/article/details/84800688 获取虚表中函数的原理 对象空间的最开始四字节内容,就是虚 ...

最新文章

  1. linux gstack pstack 进程运行堆栈查看工具
  2. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )
  3. RNN LSTM 循环神经网络 (分类例子)
  4. C# Winform只能输入数字的TextBox---补充
  5. 把数据保存到cook_JavaScript数据存储 Cookie篇
  6. java手动提交事务_Mybatis是如何将事务和连接池高效的结合的
  7. MVC-05 Model(1)
  8. 【Lintcode】029.Interleaving String
  9. JS 运行、复制、另存为 代码。
  10. 有哪些相见恨晚的运动常识
  11. SqlServer中char,varchar,nchar,nvarchar的区别
  12. 助力Java初级程序员快速成长的营养书单
  13. [有限元方法阶段汇总篇] 有限元入门简单 1D 示例程序(Helmholtz 方程)
  14. 数据挖掘 NO.2 模型效果评估
  15. NYOJ239 月老的难题 二分图最大匹配(前向星)
  16. js插值法的使用_初学js插入节点appendChild insertBefore使用方法
  17. 婚姻介绍所怎么做身份实名认证?
  18. 成都拓嘉辰丰:拼多多关键词搜不到自家商品怎么回事?
  19. redis源代码分析 – event library - Dicky - 开源中国社区
  20. STM32单片机-低功耗设置

热门文章

  1. 如何计算两幅图像的相似度,计算两张图片相似度
  2. ClickHouse系列-架构概述
  3. 60岁的机器视觉工程师,你还在敲代码?不想做机器视觉工程师,还可以做什么?机器视觉工程师职业生命线有多长​?
  4. webapp php框架,WebAPP框架资源你知道几个?
  5. c语言字符串与数组还有指针的总结(1)
  6. 数字工厂系统解决方案,如何打造数字化工厂
  7. JavaWeb实现简单的注册
  8. 哆咪付在线换钱系统网站源码
  9. 教你们怎么从菜鸟级别到电脑高手,一定要收藏起来
  10. android屏幕适配无效_Android APP全方位性能调优之屏幕适配终结者-阿里云开发者社区...