首先office的產品powerpoint是支持二次開發的,這裏的二次開發並非指在powerpoint產品中嵌入一些本身的控件,而是一些簡單的automation的控制(進入放映狀態,上一頁,下一頁等),並不對powerpoint的產品有任何修改。microsoft官網就提供了不少關於automation的demo,這些demo均可以在 https://code.msdn.microsoft.com/site/search?query=&f%5B0%5D.Value=&f%5B0%5D.Type=SearchText&ac=4 上搜索關鍵字下載。c#
這裏之因此提到註冊表,是由於開發階段通常都會安裝多個版本的powerpoint,這些不一樣版本的軟件在卸載時,並不必定會清理註冊表,可是咱們的程序須要根據註冊表上的版本號找到對應的pia,也就是打包好的程序集,若是有未清理的註冊表信息存在,就會致使代碼不工做。app
正常思路的automation應該是:打開powerpoint軟件 => 打開須要自動化控制的ppt => 進入放映模式 。可是由於沒有激活的powerpoint軟件,或者是隻讀的文件,會致使自動化控制失敗,繞開這一步的作法就是 直接執行最後一步 => 進入放映模式。這樣能夠避免前面兩個操做帶來的不可控性。ide
Step1. 在visual studio 中新建一個基於.Net framwork的console應用。code
Step2. 添加須要的dll引用,通常都須要 "Microsoft.Office.Interop.PowerPoint.dll 14.00" 這個兼容性好一點,還有一個"office"的。這些dll均可以在office的安裝目錄下找到。對象
Step3: 添加具體的automation的代碼事件
// 拿到app的實例,假設app都沒有運行 var application = new Application() // 這裏能夠直接打開powerpoint,不過咱們並不這麼操做 //application.Visible = MsoTriState.msoTrue; var pres = application.Presentations; // 打開ppt var file = pres.Open(@"c://aa/a.pptx", OF.MsoTriState.msoFalse, OF.MsoTriState.msoFalse, OF.MsoTriState.msoTrue); // 自動進入播放狀態 SlideShowSettings ss = file.SlideShowSettings; ss.StartingSlide = 1; ss.EndingSlide = file.Slides.Count; ss.Run(); Thread.Sleep(500); // 播放下一頁 application.SlideShowWindows[1].View.Next(); Thread.Sleep(500); // 推出放映 application.SlideShowWindows[1].View.Exit();
到這裏位置自動化控制已經結束了,固然若是想要監聽播放事件的話,能夠本身添加監聽。開發
這裏須要瞭解一個概念,ROT(running object table),這裏主要存儲的是正在運行中的對象。產品
// 拿到運行中的對象,若是ppt沒有運行,則會直接報錯 var pptApplication = Marshal.GetActiveObject(applicationName) as Application;
接下來就是一些常見的事件it
// 開始放映 pptApplication.SlideShowBegin += PptApplication_SlideShowBegin; // 放映結束 pptApplication.SlideShowEnd += PptApplication_SlideShowEnd; // 所有關閉 pptApplication.PresentationCloseFinal += PptApplication_PresentationCloseFinal;