今天很高兴,终于学会捕获Microsoft Office PowerPoint的事件。写出来给大家分享。我发现网上原创的文章少,转载的文章多,我来为原创做点贡献。
本文以PPT为例,其原理应该适用于WORD及EXCEL,假定读者有些使用ATL开发OFFICE插件(或COM)的基础。所谓事件,在PPT中是指SlideShowBegin(播放开始)、SlideShowEnd(播放结束)等,所有事件的名字和含义可以PPT的VBA帮助章节找到。
作者的测试环境为VC6.0,使用ATL框架。测试的基础软件框架使用的是徐景周(很感谢这位高人,代码及文章给了我很大的帮助)的《PowerPoint2K/XP插件开发》中的源码,相关源码及文章可以到www.vckbase.com
上找到。插件开发的相关细节这里就略过了。
其实技术就是一层纸,非常的简单,在此我也不打算详细的说,把几个要点说一下。其实是仔细分析了自定义按钮单击事件的代码后,经过一上午的测试实现了PPT播放事件的捕获。主要就是在几个地方加入些代码。
1.使插件类继承public IDispEventSimpleImpl<11/*自定的不重复正数*/, CPowerPoint2000Addin, &__uuidof(MSPPT::EApplication)>
定义一个转义:typedef IDispEventSimpleImpl</*nID =*/ 11,CPowerPoint2000Addin, &__uuidof(MSPPT::EApplication)> PPTEvents;
2.声明一个结构,标识响应函数信息(第一个必须为CC_STDCALL,后面是返回值,参数个数及类型)
_ATL_FUNC_INFO OnPPTEventInfo = {CC_STDCALL,VT_EMPTY,1,{VT_DISPATCH}};
3.增加事件映射
BEGIN_SINK_MAP(CPowerPoint2000Addin)
//SINK_ENTRY_INFO(1,__uuidof(Office::_CommandBarButtonEvents),/*dispid*/ 0x01,OnClickButton1, &OnClickButtonInfo)
SINK_ENTRY_INFO(11,__uuidof(MSPPT::EApplication),/*dispid*/ 2011,SlideShowBegin, &OnPPTEventInfo)//2011,DISPID,可以在MSDN上查到
END_SINK_MAP()
其它DISPID
2001 WindowSelectionChange
2002 WindowBeforeRightClick
2003 WindowBeforeDoubleClick
2004 PresentationClose
2005 PresentationSave
2006 PresentationOpen
2007 NewPresentation
2008 PresentationNewSlide
2009 WindowActivate
2010 WindowDeactivate
2011 SlideShowBegin
2012 SlideShowNextBuild
2013 SlideShowNextSlide
2014 SlideShowEnd
2015 PresentationPrint
2016 SlideSelectionChanged x
2017 ColorSchemeChanged x
2018 PresentationBeforeSave x
2019 SlideShowNextClick x
4.声明事件
void __stdcall SlideShowBegin (IDispatch * /*struct SlideShowWindow * */ Wn );
实现事件
void __stdcall CPowerPoint2000Addin::SlideShowBegin (IDispatch * /*struct SlideShowWindow * */ Wn )
{
MessageBox(NULL, "SlideShowBegin", "SlideShowBegin" , MB_OK);
// return S_OK;
}
5.激活新增的事件连接点
hr = PPTEvents::DispEventAdvise((IDispatch*)m_spApp);
if(FAILED(hr)){
//MessageBox(NULL, "FAILED", "FIELED", MB_OK);
}
这样就可以了,可以点击PPT播放按钮看一下效果,是不是弹出了自己的对话框。提示,不要忘了在插件卸载的时候断开新增的连接点事件。调试的时候不要忘记把OFFICE库改成自已机器上库的相应路径及版本。
所有源码请到我的网络硬盘(http://wallimn.ys168.com
)下载,更多信息请访问我的博客(http://blog.csdn.net/wallimn)
/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:wallimn 电邮:wallimn@sohu.com 时间:2006-11-16
博客:http://blog.csdn.net/wallimn http://wallimn.iteye.com
网络硬盘:http://wallimn.ys168.com
/***********文章发表请与本人联系,作者保留所有权利*************/
分享到:
相关推荐
ONLYOFFICE中文版是一款在国外比较流行的优秀的Office办公软件,据说市场占有率仅次于微软的Microsoft Office,可以帮助大家创建复杂的文档、专业的电子表格、令人赞叹的演示文稿以及可填写的表单,通过基于选项卡的...
office办公软件上机操作试题
Office软件图标,Office软件图标,Office软件图标
所有office软件的详细使用方法,不必再为怎么使用一项功能到处询问,做自己的老师!!!
去除of去除office密码的软件fice密码的软件去除office密码的软件
【内容提要】 本书以Microsoft Office 2003为蓝本,通过案例的形式,对Office 2003中的Word、Excel、PowerPoint和Outlook等软件的使用进行了详细的讲解。全书以培养能力为目标,本着“实践性与应用性相结合”、...
office软件,比较好实用比较好实用比较好实用
支持微软 Office2013、2016、2019软件及Office365 完全清除。
office办公软件上机操作试题
Office软件简单运用实验报告.pdf
Office uninstall是一款专门为微软Office办公软件量身定做的office卸载工具,可以帮助大家彻底卸载已经安装到电脑上的Office软件,彻底解决office卸载不干净,无法重新安装的问题,全面兼容office2003、office2007、...
由书制作成的office办公软件教程,既有对word,excel,ppt的入门使用教程,也有进阶教程.
人事管理office软件
计算机office办公软件上机操作试题.pdf
Python操作常见Office软件.zip - Python 操作 Excel、Word、Pdf 等。Python操作常见Office软件.zip - Python 操作 Excel、Word、Pdf 等。Python操作常见Office软件.zip - Python 操作 Excel、Word、Pdf 等。Python...
Office办公软件教程ppt课件,Office办公软件教程ppt,Office办公软件教程
Office办公软件学习资料(零基础)总结.pdfOffice办公软件学习资料(零基础)总结.pdfOffice办公软件学习资料(零基础)总结.pdfOffice办公软件学习资料(零基础)总结.pdfOffice办公软件学习资料(零基础)总结.pdfOffice办公...
需要联网使用的Office解密软件需要联网使用的Office解密软件需要联网使用的Office解密软件
OFFICE基本知识。.常用技巧介绍 1.工作表的拆分与冻结 (1)工作表的拆分:把工作表窗口拆分为几个窗格。每个窗格中都包含了工作表的内容,便于对工作表中感兴趣部分对比观看。 可以进行水平拆分、垂直拆分、水平和...
office办公软件,里面包含word,excel,powerpoint,outlook等等