1. 程式人生 > >C# winform以閱覽模式打開PPT,並控制PPT上下頁,輪播

C# winform以閱覽模式打開PPT,並控制PPT上下頁,輪播

ssi msdn sta string 模式 簡單 ptc msd user

[DllImport("user32.dll")]
public extern static int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

/// <summary>
/// 打開ppt文件
/// </summary>
/// <param name="filePath">路徑</param>
/// <returns></returns>
public string PPTOpen(string filePath)
{
StringBuilder s = new StringBuilder(512);
//防止連續打開多個PPT程序.
if (this.objApp != null)
{
this.objApp.Quit();
GC.Collect();
}
try
{
objApp = new POWERPOINT.Application();
//以非只讀方式打開,方便操作結束後保存.
objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);


//objSlides = objPresSet.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 = 5;
//objSST.EntryEffect = POWERPOINT.PpEntryEffect.ppEffectBoxOut;


//bAssistantOn = objApp.Assistant.On;
objApp.Assistant.On = false;
objSSS = this.objPresSet.SlideShowSettings;
pptCount = objPresSet.Slides.Count;
//objSSS.ShowType = POWERPOINT.PpSlideShowType.ppShowTypeWindow;
objSSS.Run();
IntPtr aa = (IntPtr)objPresSet.SlideShowWindow.HWND;
int j = GetWindowText(aa, s, s.Capacity); //把this.handle換成你需要的句柄
}
catch (Exception ex)
{
this.objApp.Quit();
}
return s.ToString();
}

以閱覽模式打開PPT文件,這個嗯簡單,通過getwindowtext,獲取到打開PPT的句柄,便於之後將句柄在winform的窗體中顯示

//將ppt嵌入到你想嵌入的控件中
private void intoWebbrower(string pptTitle)
{
ParenthWnd = new IntPtr(0);
ParenthWnd = FindWindow(null, pptTitle);//123.pptx - WPS 演示

SetParent(ParenthWnd, this.pictureBox1.Handle);
int x = 0;
int y = 0;
int width = this.pictureBox1.Width;
int height = this.pictureBox1.Height-100;
MoveWindow(ParenthWnd, x, y, width, height, true);
}

通過SetParent可以現實前面獲取到句柄的PPT嵌入到控件中的

而MoveWindow是控制句柄在控件中顯示的位置和大小

對於PPT其他的操作上一頁下一頁就挺簡單的了,可以查閱MSDN的Powerpoint

//上一頁
public void preButton()
{
try
{
objPresSet.SlideShowWindow.View.Previous();
}
catch { }
}

//下一頁
public void nextButton()
{
try
{
objPresSet.SlideShowWindow.View.Next();
}
catch { }
}

播放PPT還有一個比較麻煩的就是需要及時的釋放掉PPT的句柄,否者會一直被占用這

public void PPTExit()
{
try
{
if (objApp != null)
objApp.SlideShowWindows[1].View.Exit();
}
catch { }
}

而輪播的效果也可以通過objApp.SlideShowWindows[1].View.Slide.SlideIndex目前播放的是第幾頁來實現輪播的效果,

檢測到是最後一頁是objPresSet.SlideShowWindow.View.First();,就OK了

C# winform以閱覽模式打開PPT,並控制PPT上下頁,輪播