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 = "隐藏";
}
}
}
}