做了一個倒計時的小軟體,用于PPT倒計時。
如何捕獲ppt的播放,然后倒計時開始;
ppt退出播放后,倒計時結束。
怎么捕獲它的事件:ShowSlideBegin 和 ShowSlideEnd
看了一下
https://support.microsoft.com/zh-tw/help/308825/how-to-handle-powerpoint-events-with-visual-c-.net
也沒弄懂。
到底如何來捕獲呢?
uj5u.com熱心網友回復:
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
namespace PPTEventTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private PowerPoint.Application oPPT;
private void button1_Click(object sender, EventArgs e)
{
oPPT = new PowerPoint.Application();
oPPT.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
oPPT.Activate();
oPPT.SlideShowBegin += new PowerPoint.EApplication_SlideShowBeginEventHandler(SlideShowBegin);
oPPT.SlideShowEnd += new PowerPoint.EApplication_SlideShowEndEventHandler(SlideShowEnd);
}
private void SlideShowEnd(PowerPoint.Presentation Pres)
{
this.listBox1.Items.Add("結束放映");
}
private void SlideShowBegin(PowerPoint.SlideShowWindow Wn)
{
this.listBox1.Items.Add("開始放映");
}
private void Form1_Load(object sender, EventArgs e)
{
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
}
private void button2_Click(object sender, EventArgs e)
{
oPPT.SlideShowBegin -= SlideShowBegin;
oPPT.SlideShowEnd -= SlideShowEnd;
oPPT.ActivePresentation.Saved = Microsoft.Office.Core.MsoTriState.msoTrue;
oPPT.ActivePresentation.Close();
oPPT.Quit();
oPPT = null;
//GC.Collect();
}
}
}
uj5u.com熱心網友回復:
多謝!
PowerPoint = Microsoft.Office.Interop.PowerPoint; 改成了PPt = Microsoft.Office.Interop.PowerPoint;后面的也都替換成了PPt
我把 按鈕1 點擊事件里面的代碼放在了 Form1_Load中,去掉了
oPPT.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
oPPT.Activate();
不想一運行就出來ppt
按鈕2 里的代碼也用不到。 我運行此程式,然后手動打開ppt,一開始播放ppt的話,就想著能倒計時。
但是,我的倒計時代碼z_time.Start();放在private void SlideShowBegin(PPt.SlideShowWindow Wn)
{}里面,就是不倒計時啊。這是為什么呢?
uj5u.com熱心網友回復:
ppt獲得播放狀態后,就是不能倒計時啊?是不是timer和ppt有關的東西,有沖突呢?
還有其他的方法能獲取到ppt的播放和結束嗎?
uj5u.com熱心網友回復:
頂一下,看看有知道的嗎?有這方面的資料,可以學習,看看的也行。
希望有大神來給個提示。
uj5u.com熱心網友回復:
加了一個計時器w1,獲取放映總時間,定時器t1進行計數,后者的觸發次數放在TimeCount中。private PowerPoint.Application oPPT;
private int TimeCount; //t1定時器觸發次數
private System.Timers.Timer t1 = new System.Timers.Timer(1000); //t1定時器,定時間隔1000ms
private Stopwatch w1 = new Stopwatch(); //w1計時器
private void button1_Click(object sender, EventArgs e)
{
oPPT = new PowerPoint.Application();
oPPT.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
oPPT.Activate();
oPPT.SlideShowBegin += new PowerPoint.EApplication_SlideShowBeginEventHandler(SlideShowBegin);
oPPT.SlideShowEnd += new PowerPoint.EApplication_SlideShowEndEventHandler(SlideShowEnd);
t1.Elapsed += new System.Timers.ElapsedEventHandler(TimerElapsed1);
}
private void TimerElapsed1(object sender, System.Timers.ElapsedEventArgs e)
{
TimeCount++;
//listBox1.Items.Add("t1已觸發次數:" + TimeCount);
}
private void SlideShowEnd(PowerPoint.Presentation Pres)
{
this.listBox1.Items.Add("結束放映");
t1.Stop();
w1.Stop();
listBox1.Items.Add("t1觸發次數:"+TimeCount );
listBox1.Items.Add("w1計時:"+ w1.Elapsed );
listBox1.Items.Add("t1和w1停止");
w1.Reset(); //計時器歸零
}
private void SlideShowBegin(PowerPoint.SlideShowWindow Wn)
{
this.listBox1.Items.Add("開始放映");
TimeCount = 0;
t1.AutoReset = true;
t1.Start();
w1.Start();
listBox1.Items.Add("t1和w1啟動");
}
uj5u.com熱心網友回復:
對于WPS的幻燈片似乎無效!轉載請註明出處,本文鏈接:https://www.uj5u.com/net/97726.html
標籤:C#
上一篇:winform datagridvew 系結圖片時會出現閃爍的情況,有辦法解決嗎?小白一枚。
下一篇:C#查出1到8000中沒有的資料
