WPF打开PPT

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using PPt = Microsoft.Office.Interop.PowerPoint;
using OFFICECORE = Microsoft.Office.Core;

namespace WpfApplication1
{
    /// <summary>
    /// UserControlPPT.xaml 的交互逻辑
    /// </summary>
    public partial class UserControlPPT : UserControl
    {
        // 定义PowerPoint应用程序对象
        PPt.Application pptApplication;
        // 定义演示文稿对象
        PPt.Presentation presentation;
        PPt.SlideShowWindows objSSWs;
        PPt.SlideShowTransition objSST;
        PPt.SlideShowSettings objSSS;
        PPt.SlideRange objSldRng;
        PPt.SlideShowView Slideshowview;
        // 定义幻灯片集合对象
        PPt.Slides slides;
        // 定义单个幻灯片对象
        PPt.Slide slide;
        // 幻灯片的数量
        int slidescount;
        // 幻灯片的索引
        int slideIndex;
        //获取当前幻灯片页码
        int IndexCount=0;
        public UserControlPPT()
        {
            InitializeComponent();
            //Shell Word,启动Word进程
            //System.Diagnostics.Process.Start("<Path to WINWORD.EXE>");
            // 首先设置按钮为不可用
            this.btnFirst.IsEnabled = false;
            this.btnNext.IsEnabled = false;
            this.btnPrev.IsEnabled = false;
            this.btnLast.IsEnabled = false;
            //让窗体永远在窗体最前面           
        }
        /// <summary>
        /// 打开
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCheck_Click(object sender, RoutedEventArgs e)
        {
            file();
            // 必须先运行幻灯片,下面才能获得PowerPoint应用程序,否则会出现异常
            // 获得正在运行的PowerPoint应用程序
            try
            {
                pptApplication = Marshal.GetActiveObject("PowerPoint.Application") as PPt.Application;
                Slideshowview = presentation.SlideShowWindow.View;
                // 成功获取了PowerPoint程序时,使UI按钮可用
                this.btnFirst.IsEnabled = true;
                this.btnNext.IsEnabled = true;
                this.btnPrev.IsEnabled = true;
                this.btnLast.IsEnabled = true;
            }
            catch
            {
                MessageBox.Show("请先启动幻灯片", "Error", MessageBoxButton.OKCancel, MessageBoxImage.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;
                }
            }
            if (MessageBox.Show("是否跳转到上次浏览的额位置!", "提示", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
            {
                FanH();
            }
            else
            {
                IndexCount = 0;
            }
        }
        /// <summary>
        /// 返回上次关闭位置
        /// </summary>
        public void FanH()
        {
            if (IndexCount > 0)
            {
                Slideshowview.GotoSlide(IndexCount+1);
            }
        }
        /// <summary>
        /// 第一页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnFirst_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // 在普通视图中调用Select方法来选中第一张幻灯片
                slides[1].Select();
                slide = slides[1];
            }
            catch
            {
                // 在阅读模式下使用下面的方式来切换到第一张幻灯片
                pptApplication.SlideShowWindows[1].View.First();
                slide = pptApplication.SlideShowWindows[1].View.Slide;
            }
        }
        /// <summary>
        /// 上一页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnNext_Click(object sender, RoutedEventArgs e)
        {
            slideIndex = slide.SlideIndex - 1;
            if (slideIndex >= 1)
            {
                try
                {
                    slide = slides[slideIndex];
                    slides[slideIndex].Select();
                }
                catch
                {
                    // 在阅读模式下使用下面的方式来切换到上一张幻灯片
                    pptApplication.SlideShowWindows[1].View.Previous();
                    slide = pptApplication.SlideShowWindows[1].View.Slide;
                }
            }
            else
            {
                MessageBox.Show("已经是第一页了");
            }
        }
        /// <summary>
        /// 下一页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPrev_Click(object sender, RoutedEventArgs e)
        {
            slideIndex = slide.SlideIndex + 1;
            if (slideIndex > slidescount)
            {
                MessageBox.Show("已经是最后一页了");
            }
            else
            {
                try
                {
                    slide = slides[slideIndex];
                    slides[slideIndex].Select();
                }
                catch
                {
                    // 在阅读模式下使用下面的方式来切换到下一张幻灯片
                    pptApplication.SlideShowWindows[1].View.Next();
                    slide = pptApplication.SlideShowWindows[1].View.Slide;
                }
                IndexCount = Slideshowview.Slide.SlideIndex - 1; ;
            }
        }
        /// <summary>
        /// 尾页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLast_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                slides[slidescount].Select();
                slide = slides[slidescount];
            }
            catch
            {
                // 在阅读模式下使用下面的方式来切换到最后幻灯片
                pptApplication.SlideShowWindows[1].View.Last();
                slide = pptApplication.SlideShowWindows[1].View.Slide;
            }
        }
        public void file()
        {
            //选择文件夹
            OpenFileDialog fileDialog = new OpenFileDialog();
            fileDialog.Multiselect = true;
            fileDialog.Title = "请选择文件";
            fileDialog.Filter = "所有文件(*.*)|*.*";
            if (fileDialog.ShowDialog() == true)
            {
                string[] names = fileDialog.FileNames;
                PPt.Application objApp = new PPt.Application();
                //以非只读方式打开,方便操作结束后保存.
                presentation = objApp.Presentations.Open(names[0], OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);
                // 自动播放的代码(开始)
                slidescount = presentation.Slides.Count;
                objSldRng = presentation.Slides.Range(slidescount);
                objSST = objSldRng.SlideShowTransition;
                objSSS = presentation.SlideShowSettings;
                objSSS.Run();
            }
        }
        /// <summary>
        /// 关闭
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCols_Click(object sender, RoutedEventArgs e)
        {
            presentation.Close();
            //pptApplication.Quit();
        }
        /// <summary>
        /// 隐藏按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnBury_Click(object sender, RoutedEventArgs e)
        {
            if (btnBury.Content.ToString()=="隐藏")
            {
                //GridName.Visibility = Visibility.Collapsed;
                btnFirst.Visibility = Visibility.Collapsed;
                btnNext.Visibility = Visibility.Collapsed;
                btnPrev.Visibility = Visibility.Collapsed;
                btnLast.Visibility = Visibility.Collapsed;
                btnCheck.Visibility = Visibility.Collapsed;
                btnCols.Visibility = Visibility.Collapsed;
                btnBury.Content = "显示";                
            }
            else
            {
                btnFirst.Visibility = Visibility.Visible;
                btnNext.Visibility = Visibility.Visible;
                btnPrev.Visibility = Visibility.Visible;
                btnLast.Visibility = Visibility.Visible;
                btnCheck.Visibility = Visibility.Visible;
                btnCols.Visibility = Visibility.Visible;
                btnBury.Content = "隐藏";
            }
        }
    }
}
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值