diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs index 7ccee9f7..88fd8915 100644 --- a/Ink Canvas/MainWindow_cs/MW_PPT.cs +++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs @@ -70,9 +70,9 @@ namespace Ink_Canvas #region PPT Application Variables public static Microsoft.Office.Interop.PowerPoint.Application pptApplication; - public static Presentation presentation; - public static Slides slides; - public static Slide slide; + public static dynamic presentation; + public static dynamic slides; + public static dynamic slide; public static int slidescount; #endregion @@ -523,6 +523,7 @@ namespace Ink_Canvas { try { + dynamic presObj = pres; Application.Current.Dispatcher.InvokeAsync(() => { // 在初始化墨迹管理器之前,先清理画布上的所有墨迹 @@ -534,26 +535,26 @@ namespace Ink_Canvas TimeMachineHistories[0] = null; } - _singlePPTInkManager?.InitializePresentation(pres); + _singlePPTInkManager?.InitializePresentation(presObj as Presentation); // 处理跳转到首页或上次播放页的逻辑 - HandlePresentationOpenNavigation(pres); + HandlePresentationOpenNavigation(presObj); // 检查隐藏幻灯片 if (Settings.PowerPointSettings.IsNotifyHiddenPage) { - CheckAndNotifyHiddenSlides(pres); + CheckAndNotifyHiddenSlides(presObj); } // 检查自动播放设置 if (Settings.PowerPointSettings.IsNotifyAutoPlayPresentation) { - CheckAndNotifyAutoPlaySettings(pres); + CheckAndNotifyAutoPlaySettings(presObj); } _pptUIManager?.UpdateConnectionStatus(true); - LogHelper.WriteLogToFile($"已打开新演示文稿: {pres.Name},墨迹状态已清理", LogHelper.LogType.Event); + LogHelper.WriteLogToFile($"已打开新演示文稿: {presObj.Name},墨迹状态已清理", LogHelper.LogType.Event); }); } catch (Exception ex) @@ -613,6 +614,7 @@ namespace Ink_Canvas { try { + dynamic wnObj = wn; if (Settings.Automation.IsAutoFoldInPPTSlideShow) { if (!isFloatingBarFolded) @@ -630,21 +632,21 @@ namespace Ink_Canvas await Application.Current.Dispatcher.InvokeAsync(async () => { - Presentation activePresentation = null; + dynamic activePresentation = null; int currentSlide = 0; int totalSlides = 0; - if (wn?.View != null && wn.Presentation != null) + if (wnObj?.View != null && wnObj.Presentation != null) { - activePresentation = wn.Presentation; - currentSlide = wn.View.CurrentShowPosition; + activePresentation = wnObj.Presentation; + currentSlide = wnObj.View.CurrentShowPosition; totalSlides = activePresentation.Slides.Count; // 初始化当前播放页码跟踪 _currentSlideShowPosition = currentSlide; } else { - activePresentation = _pptManager?.GetCurrentActivePresentation() as Presentation; + activePresentation = _pptManager?.GetCurrentActivePresentation(); currentSlide = _pptManager?.GetCurrentSlideNumber() ?? 0; totalSlides = _pptManager?.SlidesCount ?? 0; // 初始化当前播放页码跟踪 @@ -657,7 +659,7 @@ namespace Ink_Canvas { try { - _singlePPTInkManager.InitializePresentation(activePresentation); + _singlePPTInkManager.InitializePresentation(activePresentation as Presentation); } catch (Exception) { @@ -787,15 +789,16 @@ namespace Ink_Canvas { try { + dynamic wnObj = wn; Application.Current.Dispatcher.InvokeAsync(() => { - if (wn?.View == null || wn.Presentation == null) + if (wnObj?.View == null || wnObj.Presentation == null) { return; } - var currentSlide = wn.View.CurrentShowPosition; - var activePresentation = wn.Presentation; + var currentSlide = wnObj.View.CurrentShowPosition; + dynamic activePresentation = wnObj.Presentation; var totalSlides = activePresentation.Slides.Count; // 更新当前播放页码 @@ -816,6 +819,7 @@ namespace Ink_Canvas { try { + dynamic presObj = pres; if (Settings.Automation.IsAutoFoldAfterPPTSlideShow && !isFloatingBarFolded) { FoldFloatingBar_MouseUp(new object(), null); @@ -837,9 +841,9 @@ namespace Ink_Canvas // 如果无法获取,尝试从演示文稿的SlideShowWindow获取 try { - if (pres.SlideShowWindow != null && pres.SlideShowWindow.View != null) + if (presObj.SlideShowWindow != null && presObj.SlideShowWindow.View != null) { - currentPage = pres.SlideShowWindow.View.CurrentShowPosition; + currentPage = presObj.SlideShowWindow.View.CurrentShowPosition; } } catch { } @@ -847,7 +851,7 @@ namespace Ink_Canvas } // 保存墨迹和位置信息 - _singlePPTInkManager?.SaveAllStrokesToFile(pres, currentPage); + _singlePPTInkManager?.SaveAllStrokesToFile(presObj as Presentation, currentPage); await Application.Current.Dispatcher.InvokeAsync(() => { @@ -947,7 +951,7 @@ namespace Ink_Canvas #endregion #region Helper Methods - private void HandlePresentationOpenNavigation(Presentation pres) + private void HandlePresentationOpenNavigation(dynamic pres) { try { @@ -966,7 +970,7 @@ namespace Ink_Canvas } } - private void ShowPreviousPageNotification(Presentation pres) + private void ShowPreviousPageNotification(dynamic pres) { try { @@ -980,7 +984,7 @@ namespace Ink_Canvas if (!File.Exists(positionFile)) return; - if (int.TryParse(File.ReadAllText(positionFile), out var page) && page > 0) + if (int.TryParse(File.ReadAllText(positionFile), out int page) && page > 0) { _lastPlaybackPage = page; new YesOrNoNotificationWindow($"上次播放到了第 {page} 页, 是否立即跳转", () => @@ -1013,14 +1017,14 @@ namespace Ink_Canvas } } - private void CheckAndNotifyHiddenSlides(Presentation pres) + private void CheckAndNotifyHiddenSlides(dynamic pres) { try { bool hasHiddenSlides = false; if (pres?.Slides != null) { - foreach (Slide slide in pres.Slides) + foreach (dynamic slide in pres.Slides) { if (slide.SlideShowTransition.Hidden == MsoTriState.msoTrue) { @@ -1040,7 +1044,7 @@ namespace Ink_Canvas { if (pres?.Slides != null) { - foreach (Slide slide in pres.Slides) + foreach (dynamic slide in pres.Slides) { if (slide.SlideShowTransition.Hidden == MsoTriState.msoTrue) slide.SlideShowTransition.Hidden = MsoTriState.msoFalse; @@ -1066,7 +1070,7 @@ namespace Ink_Canvas } } - private void CheckAndNotifyAutoPlaySettings(Presentation pres) + private void CheckAndNotifyAutoPlaySettings(dynamic pres) { try { @@ -1075,7 +1079,7 @@ namespace Ink_Canvas bool hasSlideTimings = false; if (pres?.Slides != null) { - foreach (Slide slide in pres.Slides) + foreach (dynamic slide in pres.Slides) { if (slide.SlideShowTransition.AdvanceOnTime == MsoTriState.msoTrue && slide.SlideShowTransition.AdvanceTime > 0)