zoukankan      html  css  js  c++  java
  • c#如何操作ppt的播放 【转】

    C#控制ppt的代码

    包括打开ppt文件、读取幻灯页,插入幻灯片,自动播放等

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using OFFICECORE = Microsoft.Office.Core;

    using POWERPOINT = Microsoft.Office.Interop.PowerPoint;

    using System.windows;

    using System.Collections;

    using System.windows.Controls;

    namespace PPTDraw.PPTOperate

    {

      /// <summary>

      /// PPT文档操作实现类.

      /// </summary>

      public class OperatePPT

      {

        #region=========基本的参数信息=======

        POWERPOINT.Application objApp = null;

        POWERPOINT.Presentation objPresSet = null;

        POWERPOINT.SlideShowwindows objSSWs;

        POWERPOINT.SlideShowTransition objSST;

        POWERPOINT.SlideShowSettings objSSS;

        POWERPOINT.SlideRange objSldRng;

        bool bAssistantOn;

        double pixperPoint = 0;

        double offsetx = 0;

        double offsety = 0;

        #endregion

        #region===========操作方法==============

        /// <summary>

        /// 打开PPT文档并播放显示。

        /// </summary>

        /// <param name="filePath">PPT文件路径</param>

        public void PPTOpen(string filePath)

        {

          //防止连续打开多个PPT程序.

          if (this.objApp != null) { return; }

          try

          {

            objApp = new POWERPOINT.Application();

            //以非只读方式打开,方便操作结束后保存.

            objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);

            //Prevent Office Assistant from displaying alert messages:

            bAssistantOn = objApp.Assistant.On;

            objApp.Assistant.On = false;

            objSSS = this.objPresSet.SlideShowSettings;

            objSSS.Run();

          }

          catch (Exception ex)

          {

            this.objApp.Quit();

          }

        }

        /// <summary>

        /// 自动播放PPT文档.

        /// </summary>

        /// <param name="filePath">PPTy文件路径.</param>

        /// <param name="playTime">翻页的时间间隔.【以秒为单位】</param>

        public void PPTAuto(string filePath, int playTime)

        {

          //防止连续打开多个PPT程序.

          if (this.objApp != null) { return; }

          objApp = new POWERPOINT.Application();

          objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoCTrue, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);

          // 自动播放的代码(开始)

          int Slides = objPresSet.Slides.Count;

          int[] SlideIdx = new int[Slides];

          for (int i = 0; i < Slides; i++) { SlideIdx[i] = i + 1; };

          objSldRng = objPresSet.Slides.Range(SlideIdx);

          objSST = objSldRng.SlideShowTransition;

          //设置翻页的时间.

          objSST.AdvanceOnTime = OFFICECORE.MsoTriState.msoCTrue;

          objSST.AdvanceTime = playTime;

          //翻页时的特效!

          objSST.EntryEffect = POWERPOINT.PpEntryEffect.ppEffectCircleOut;

          //Prevent Office Assistant from displaying alert messages:

          bAssistantOn = objApp.Assistant.On;

          objApp.Assistant.On = false;

          //Run the Slide show from slides 1 thru 3.

          objSSS = objPresSet.SlideShowSettings;

          objSSS.StartingSlide = 1;

          objSSS.EndingSlide = Slides;

          objSSS.Run();

          //Wait for the slide show to end.

          objSSWs = objApp.SlideShowwindows;

          while (objSSWs.Count >= 1) System.Threading.Thread.Sleep(playTime * 100);

          this.objPresSet.Close();

          this.objApp.Quit();

        }

        /// <summary>

        /// PPT下一页。

        /// </summary>

        public void NextSlide()

        {

          if (this.objApp != null)

            this.objPresSet.SlideShowwindow.View.Next();

        }

        /// <summary>

        /// PPT上一页。

        /// </summary>

        public void PreviousSlide()

        {

          if (this.objApp != null)

            this.objPresSet.SlideShowwindow.View.Previous();

        }

        /// <summary>

        /// 对当前的PPT页面进行图片插入操作。

        /// </summary>

        /// <param name="alImage">图片对象信息数组</param>

        /// <param name="offsetx">插入图片距离左边长度</param>

        /// <param name="pixperPoint">距离比例值</param>

        /// <returns>是否添加成功!</returns>

        public bool InsertToSlide(List<PPTOBJ> listObj)

        {

          bool InsertSlide = false;

          if (this.objPresSet != null)

          {

            this.SlideParams();

            int slipeint = objPresSet.SlideShowwindow.View.CurrentShowPosition;

            foreach (PPTOBJ myobj in listObj)

            {

              objPresSet.Slides[slipeint].Shapes.AddPicture(

                 myobj.Path,      //图片路径

                 OFFICECORE.MsoTriState.msoFalse,

                 OFFICECORE.MsoTriState.msoTrue,

                 (float)((myobj.X - this.offsetx) / this.pixperPoint),    //插入图片距离左边长度

                 (float)(myobj.Y / this.pixperPoint),    //插入图片距离顶部高度

                 (float)(myobj.Width / this.pixperPoint),  //插入图片的宽度

                 (float)(myobj.Height / this.pixperPoint)  //插入图片的高度

               );

            }

            InsertSlide = true;

          }

          return InsertSlide;

        }

        /// <summary>

        /// 计算InkCanvas画板上的偏移参数,与PPT上显示图片的参数。

        /// 用于PPT加载图片时使用

        /// </summary>

        private void SlideParams()

        {

          double slideWidth = this.objPresSet.PageSetup.SlideWidth;

          double slideHeight = this.objPresSet.PageSetup.SlideHeight;

          double inkCanWidth = SystemParameters.PrimaryScreenWidth;//inkCan.ActualWidth;

          double inkCanHeight = SystemParameters.PrimaryScreenHeight;//inkCan.ActualHeight ;

          if ((slideWidth / slideHeight) > (inkCanWidth / inkCanHeight))

          {

            this.pixperPoint = inkCanHeight / slideHeight;

            this.offsetx = 0;

            this.offsety = (inkCanHeight - slideHeight * this.pixperPoint) / 2;

          }

          else

          {

            this.pixperPoint = inkCanHeight / slideHeight;

            this.offsety = 0;

            this.offsetx = (inkCanWidth - slideWidth * this.pixperPoint) / 2;

          }

        }

        /// <summary>

        /// 关闭PPT文档。

        /// </summary>

        public void PPTClose()

        {

          //装备PPT程序。

          if (this.objPresSet != null)

          {

            //判断是否退出程序,可以不使用。

            //objSSWs = objApp.SlideShowwindows;

            //if (objSSWs.Count >= 1)

            //{

              if (MessageBox.Show("是否保存修改的笔迹!", "提示", MessageBoxButton.OKCancel) == MessageBoxResult.OK)

                this.objPresSet.Save();

            //}

            //this.objPresSet.Close();

          }

          if (this.objApp != null)

            this.objApp.Quit();

          GC.Collect();

        }

        #endregion

      }

    }

     

    本文出自 “我的笔记” 博客,请务必保留此出处http://9891814.blog.51cto.com/9881814/1627298

  • 相关阅读:
    http://knockoutjs.com/工作杂记
    wp开发杂记
    [转载]jQuery 顺便学习下CSS选择器 奇偶匹配nthchild(even)
    [转载]各种图像处理类库的比较及选择(The Comparison of Image Processing Libraries)
    [转载]多维数组与Json格式的转化
    [转载]OpenCv,EmguCv及.net之间的互动(The Interaction of OpenCv, EmguCv AND .net)
    [转载].net中捕获摄像头视频的方式及对比(How to Capture Camera Video via .Net)
    paip.杀不死进程的原因僵尸进程的解决.txt
    paip.c3p0 数据库连接池 NullPointerException 的解决...
    paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库.
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/7660759.html
Copyright © 2011-2022 走看看