[C# 开发技巧系列] 使用C#操作幻灯片

本专题概要

  • 引言
  • 实现思路
  • 遥控幻灯片程序的实现
  • 小结

 

一、引言

记得老师讲课的时候,经常会用PPT遥控翻页笔来遥控幻灯片来给我们讲课,当时觉得非常有趣,由于这段时间接触了VSTO相关的开发,了解到了Office的相关产品都公开了一些API来让我们对Office产品进行二次开发,这时候我就想,能不能用PowerPoint公开的对象来制作一个遥控幻灯片的程序呢?在本专题就向大家介绍下这个小工具的实现思路和效果。

二、实现思路

  1. 既然要实现的程序是遥控幻灯片,这样我们就需要先获得幻灯片应用程序的,在PowerPoint对象模型中,Microsoft.Office.Interop.PowerPoint.Application代表Powerpoint应用程序,这点和Word、Excel和Outlook都是一样的。
  2. 获得了幻灯片应用程序对象之后,之后我们就需要获得幻灯片对象,因为我们遥控的是幻灯片,在PowerPoint对象模型中也提供了幻灯片对象,即Microsoft.Office.Interop.PowerPoint.Slide。由于幻灯片又是存在于演示文稿中的,所以我们要想获得幻灯片对象,就需要先获得演示文稿对象,Microsoft.Office.Interop.PowerPoint.Presentation 就是代表演示文稿对象。
  3. 获得幻灯片对象之后,我们就可以利用幻灯片对象的Select方法来进行幻灯片的切换,然而在阅读模式的情况下,不能用Select方法来进行翻页,此时需要另一种方式来实现,即调用 Microsoft.Office.Interop.PowerPoint.SlideShowView对象的First,Next,Last,Previous方法来进行幻灯片翻页。

上面列出来的就是该工具的实现思路,其实思路非常的简单,为了帮助大家更形象地理解PowerPoint的对象模型,下面就用一张图来介绍PowerPoint中对象与真真的幻灯片的一个对象关系(从下面的图中也可以体会到面向对象编程,就是把看到的东西抽象出一个个对象):

下面一张是阅读模式下程序中实现翻页功能与在幻灯片中的对应关系:

三、遥控幻灯片程序的实现

有了上面的解释,我们再看下面的实现代码时,相信大家肯定不会觉得有任何难道了,下面就直接贴出部分的实现的代码(这样可以让大家参看代码自己去实现剩余的部分,当然在文章的最后也会提供全部源码的下载):

        /// <summary>
        /// 检查是否打开幻灯片程序
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCheck_Click(object sender, EventArgs e)
        {
            // 必须先运行幻灯片,下面才能获得PowerPoint应用程序,否则会出现异常
            // 获得正在运行的PowerPoint应用程序
            try
            {
                pptApplication = Marshal.GetActiveObject("PowerPoint.Application") as PPt.Application;

                // 成功获取了PowerPoint程序时,使UI按钮可用
                this.btnFirst.Enabled = true;
                this.btnNext.Enabled = true;
                this.btnPrev.Enabled = true;
                this.btnLast.Enabled = true;
            }
            catch
            {
                MessageBox.Show("请先启动遥控的幻灯片", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
            }
            if (pptApplication != null)
            {
                //获得演示文稿对象
                presentation = pptApplication.ActivePresentation;
                // 获得幻灯片对象集合
                slides = presentation.Slides;
                // 获得幻灯片的数量
                slidescount = slides.Count;
                // 获得当前选中的幻灯片
                try
                {
                    // 在普通视图下这种方式可以获得当前选中的幻灯片对象
                    // 然而在阅读模式下,这种方式会出现异常
                    slide = slides[pptApplication.ActiveWindow.Selection.SlideRange.SlideNumber];
                }
                catch
                {
                    // 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象
                    slide = pptApplication.SlideShowWindows[1].View.Slide;
                }
            }
        }

        // 第一页事件
        private void btnFirst_Click(object sender, EventArgs e)
        {        
            try
            {
                // 在普通视图中调用Select方法来选中第一张幻灯片
                slides[1].Select();         
                slide = slides[1];
            }
            catch
            {
                // 在阅读模式下使用下面的方式来切换到第一张幻灯片
                pptApplication.SlideShowWindows[1].View.First();
                slide = pptApplication.SlideShowWindows[1].View.Slide;
            }
        }

下面就看看该遥控程序的运行效果是如何的:

 

四、小结

  到这里本专题的介绍就介绍就结束,其实本程序最好是放在手机客户端,这样我们就可以利用手机来对我们的幻灯片进行翻页了,这样就和激光笔的效果就是一样的了,这里就给大家先提供一个思路吧,我相信如果要在手机客户端实现的话,肯定就需要蓝牙编程的技术或者WiFi编程的技术来获取笔记本电脑的幻灯片应用程序,只要我们成功在手机客户端获取了PowerPoint应用程序对象的话,后面的实现过程就和本程序的实现方式就基本一样的,然而我们同时打开笔记本的蓝牙和手机的蓝牙(也可以利用WiFi),这样我们就可以轻松实现用手机来遥控我们演讲文稿了,如果有时间的话,也会研究下手机的蓝牙编程技术,实现了肯定会在博客中向大家分享的,如果其他朋友提前实现了的,也不要忘记在博客分享给大家了。

 程序所有源码:http://code.msdn.microsoft.com/PowerPoint-42854d28#content  (麻烦大家下载的时候帮忙点下评级)

 

posted @ 2013-03-19 11:26  Learning hard  阅读(9989)  评论(4编辑  收藏  举报