我試圖做一個.NET 4.0程序,它會得到一個PowerPoint放映(PPS)的文件名上正在同觀看運行PPS的文件名機。目的是爲了在沒有任何用戶操作的情況下,特定演示需要花費多長時間才能完成。如何獲得使用System.Runtime.InteropServices.Marshal
我已嘗試以下步驟:在演示文稿正在查看
oPPTApp = (PowerPoint.Application)System.Runtime.InteropServices.Marshal.
GetActiveObject("PowerPoint.Application");
string ppsname = oPPTApp.ActivePresentation.Name.ToLower();
程序運行最小化。即使在與PPS(通過幻燈片滾動,點擊等)進行交互,我從Microsoft.Office.Interop.PowerPoint._Application以下錯誤:
Application (unknown member) : Invalid request. There is no active presentation.
通過http://support.microsoft.com/kb/285472搜索後,我嘗試添加:
oPPTApp.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
然而,這開始的PowerPoint的新實例,然後同樣的錯誤。
我也將提到我用從這裏的Microsoft PowerPoint 14.0對象庫和IOleMessageFilter錯誤處理程序:http://msdn.microsoft.com/en-us/library/vstudio/ms228772(v=vs.110).aspx
不ActivePresentation.Name不適用於PPS文件?有沒有更好的方法來獲取開放式PPS的文件名?
使用任務管理器,進程選項卡。檢查powerpnt.exe運行的實例數量。不止一個是太多。 – 2014-10-17 18:22:02
我100%確定只有1個實例正在運行,而我沒有使用oPPTApp.Visible行來嘗試。添加此行將啓動powerpnt.exe的另一個實例,但無論哪種方式都會出現「無活動表示」錯誤。 – Alex 2014-10-17 18:25:14
爲什麼你不遵循我的建議?修改自動化界面可能會留下額外的運行副本,您無法看到,但會被GetActiveObject()發現。 – 2014-10-17 18:28:25