C# 播放ppt 的问题,如何捕获结束的状态

blueteeth_yl 2009-11-28 09:13:47


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Core;

namespace PPT
{
public partial class FraMain : Form
{
public FraMain()
{
InitializeComponent();
}

PowerPoint.Application objApp;
PowerPoint.Presentations objPresSet;
PowerPoint._Presentation objPres;
PowerPoint.Slides objSlides;

//PowerPoint.TextRange objTextRng;

PowerPoint.SlideShowWindows objSSWs;
PowerPoint.SlideShowTransition objSST;
PowerPoint.SlideShowSettings objSSS;
PowerPoint.SlideRange objSldRng;

public delegate void MyInvoke2();
// 选中文件
private void ButSelect_Click(object sender, EventArgs e)
{
openFileDialog1.DefaultExt = "*.ppt|*.pps";
openFileDialog1.Filter = "PPT文件(*.ppt;*.pps)|*.ppt;*.pps";
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;
}
//播放文件

private void butPlay_Click(object sender, EventArgs e)
{
ShowPresentation();
objApp.SlideShowEnd += new PowerPoint.EApplication_SlideShowEndEventHandler(powerpoint_SlideShowEnd);
GC.Collect();
}

private void ShowPresentation()
{
String strTemplate;
//指定一个空的就可以.
strTemplate = textBox1.Text;
bool bAssistantOn;

objApp = new PowerPoint.Application();

objApp.Visible = MsoTriState.msoTrue;
objPresSet = objApp.Presentations;
objPres = objPresSet.Open(strTemplate,
MsoTriState.msoFalse, MsoTriState.msoTrue, MsoTriState.msoTrue);
objSlides = objPres.Slides;

int[] SlideIdx = new int[3];
for (int i = 0; i < 3; i++) SlideIdx[i] = i + 1;
objSldRng = objSlides.Range(SlideIdx);
objSST = objSldRng.SlideShowTransition;
objSST.AdvanceOnTime = MsoTriState.msoTrue;
objSST.AdvanceTime = 3;
objSST.EntryEffect = PowerPoint.PpEntryEffect.ppEffectBoxOut;

bAssistantOn = objApp.Assistant.On;
//objApp.Assistant.On = true;
objSSS = objPres.SlideShowSettings;
//如过你不想循环放映就把TRUE改成FALSE.
objSSS.LoopUntilStopped = MsoTriState.msoFalse;
objSSS.StartingSlide = 1;
objSSS.EndingSlide = objSlides.Application.ActivePresentation.Slides.Count;
objSSS.Run();

//Wait for the slide show to end.
objSSWs = objApp.SlideShowWindows;

if (objSSWs.Count >= 1)
{
//MyInvoke2 mi2 = new MyInvoke2();
//BeginInvoke(mi2);

System.Threading.Thread.Sleep(100);
return;
}

////Reenable Office Assisant, if it was on:

if (bAssistantOn)
{
objApp.Assistant.On = true;
objApp.Assistant.Visible = false;
}

//Close the presentation without saving changes and quit PowerPoint.

objPres.Close();
objApp.Quit();
}
}
}



如何捕获结束的状态,就是意思,当ppt播放结束后,它自动弹出一个messagebox来
...全文
449 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lackyking 2009-12-25
  • 打赏
  • 举报
回复
objApp.SlideShowEnd += new PowerPoint.EApplication_SlideShowEndEventHandler(powerpoint_SlideShowEnd);

你这里不是已经绑定了一个结束事件了吗?
只要
private void powerpoint_SlideShowEnd(PowerPoint.Presentation Pres)
{
//这里写你的代码
}
blueteeth_yl 2009-11-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happy664618843 的回复:]
不是可以判断是否是最后一张吗 如果是则exit
[/Quote]

没有判断是最后一张啊.
你在仔细看下。
happy664618843 2009-11-28
  • 打赏
  • 举报
回复
不是可以判断是否是最后一张吗 如果是则exit

110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧