diff --git a/Ink Canvas/Helpers/ComPPTLinkManager.cs b/Ink Canvas/Helpers/ComPPTLinkManager.cs index 81cf77f0..9faa9f27 100644 --- a/Ink Canvas/Helpers/ComPPTLinkManager.cs +++ b/Ink Canvas/Helpers/ComPPTLinkManager.cs @@ -41,6 +41,12 @@ namespace Ink_Canvas.Helpers set => _inner.IsSupportWPS = value; } + public bool SkipAnimationsWhenNavigating + { + get => _inner.SkipAnimationsWhenNavigating; + set => _inner.SkipAnimationsWhenNavigating = value; + } + public int SlidesCount => _inner.SlidesCount; public object PPTApplication => _inner.PPTApplication; diff --git a/Ink Canvas/Helpers/IPPTLinkManager.cs b/Ink Canvas/Helpers/IPPTLinkManager.cs index b561a22e..57ea84fe 100644 --- a/Ink Canvas/Helpers/IPPTLinkManager.cs +++ b/Ink Canvas/Helpers/IPPTLinkManager.cs @@ -16,6 +16,7 @@ namespace Ink_Canvas.Helpers bool IsConnected { get; } bool IsInSlideShow { get; } bool IsSupportWPS { get; set; } + bool SkipAnimationsWhenNavigating { get; set; } int SlidesCount { get; } object PPTApplication { get; } diff --git a/Ink Canvas/Helpers/PPTManager.cs b/Ink Canvas/Helpers/PPTManager.cs index efd19c57..9b041f9c 100644 --- a/Ink Canvas/Helpers/PPTManager.cs +++ b/Ink Canvas/Helpers/PPTManager.cs @@ -125,6 +125,8 @@ namespace Ink_Canvas.Helpers } } public bool IsSupportWPS { get; set; } = false; + public bool SkipAnimationsWhenNavigating { get; set; } = false; + #endregion #region Private Fields @@ -883,7 +885,8 @@ namespace Ink_Canvas.Helpers if (slideShowWindow != null) { dynamic sswObj = slideShowWindow; - sswObj.Activate(); + if (!SkipAnimationsWhenNavigating) + sswObj.Activate(); view = sswObj.View; if (view != null) { @@ -936,7 +939,8 @@ namespace Ink_Canvas.Helpers if (slideShowWindow != null) { dynamic sswObj = slideShowWindow; - sswObj.Activate(); + if (!SkipAnimationsWhenNavigating) + sswObj.Activate(); view = sswObj.View; if (view != null) { diff --git a/Ink Canvas/Helpers/ROTPPTManager.cs b/Ink Canvas/Helpers/ROTPPTManager.cs index 51c82911..b4e33ca7 100644 --- a/Ink Canvas/Helpers/ROTPPTManager.cs +++ b/Ink Canvas/Helpers/ROTPPTManager.cs @@ -124,6 +124,7 @@ namespace Ink_Canvas.Helpers } public bool IsSupportWPS { get; set; } = false; + public bool SkipAnimationsWhenNavigating { get; set; } = false; /// /// 当前演示文稿的总页数(每次按需计算,不缓存 COM 对象)。 @@ -734,7 +735,8 @@ namespace Ink_Canvas.Helpers if (slideShowWindow != null) { dynamic sswObj = slideShowWindow; - sswObj.Activate(); + if (!SkipAnimationsWhenNavigating) + sswObj.Activate(); view = sswObj.View; if (view != null) { @@ -788,7 +790,8 @@ namespace Ink_Canvas.Helpers if (slideShowWindow != null) { dynamic sswObj = slideShowWindow; - sswObj.Activate(); + if (!SkipAnimationsWhenNavigating) + sswObj.Activate(); view = sswObj.View; if (view != null) { @@ -842,7 +845,8 @@ namespace Ink_Canvas.Helpers if (slideShowWindow != null) { dynamic sswObj = slideShowWindow; - sswObj.Activate(); + if (!SkipAnimationsWhenNavigating) + sswObj.Activate(); view = sswObj.View; if (view != null) { diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml index c6ef8a61..aede2b85 100644 --- a/Ink Canvas/MainWindow.xaml +++ b/Ink Canvas/MainWindow.xaml @@ -1517,6 +1517,15 @@ IsOn="False" FontFamily="Microsoft YaHei UI" FontWeight="Bold" Toggled="ToggleSwitchPowerPointEnhancement_Toggled" /> + + + + + diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs index 0a9a0b74..d107a645 100644 --- a/Ink Canvas/MainWindow_cs/MW_PPT.cs +++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs @@ -244,6 +244,7 @@ namespace Ink_Canvas } _pptManager.IsSupportWPS = Settings.PowerPointSettings.IsSupportWPS; + _pptManager.SkipAnimationsWhenNavigating = Settings.PowerPointSettings.SkipAnimationsWhenGoNext; // 注册事件 _pptManager.PPTConnectionChanged += OnPPTConnectionChanged; @@ -1005,11 +1006,13 @@ namespace Ink_Canvas if (Settings.PowerPointSettings.IsAlwaysGoToFirstPageOnReenter) { _pptManager?.TryNavigateToSlide(1); + if (Settings.PowerPointSettings.SkipAnimationsWhenGoNext) { try { this.Activate(); } catch { } } } else if (_shouldNavigateToLastPage && _lastPlaybackPage > 0) { _pptManager?.TryNavigateToSlide(_lastPlaybackPage); _shouldNavigateToLastPage = false; // 重置标志位 + if (Settings.PowerPointSettings.SkipAnimationsWhenGoNext) { try { this.Activate(); } catch { } } } // 更新UI状态 @@ -1428,6 +1431,7 @@ namespace Ink_Canvas if (Settings.PowerPointSettings.IsAlwaysGoToFirstPageOnReenter) { _pptManager?.TryNavigateToSlide(1); + if (Settings.PowerPointSettings.SkipAnimationsWhenGoNext) { try { this.Activate(); } catch { } } } else if (Settings.PowerPointSettings.IsNotifyPreviousPage) { @@ -1483,6 +1487,7 @@ namespace Ink_Canvas { pres.Windows[1].View.GotoSlide(page); } + if (Settings.PowerPointSettings.SkipAnimationsWhenGoNext) { try { this.Activate(); } catch { } } } } catch (Exception ex) @@ -1876,10 +1881,25 @@ namespace Ink_Canvas } } - // 更新PPT管理器的WPS支持设置 + // 更新PPT管理器的WPS支持设置与翻页跳过动画设置 if (_pptManager != null) { _pptManager.IsSupportWPS = Settings.PowerPointSettings.IsSupportWPS; + _pptManager.SkipAnimationsWhenNavigating = Settings.PowerPointSettings.SkipAnimationsWhenGoNext; + } + + SaveSettingsToFile(); + } + + private void ToggleSwitchSkipAnimationsWhenGoNext_Toggled(object sender, RoutedEventArgs e) + { + if (!isLoaded) return; + + Settings.PowerPointSettings.SkipAnimationsWhenGoNext = ToggleSwitchSkipAnimationsWhenGoNext.IsOn; + + if (_pptManager != null) + { + _pptManager.SkipAnimationsWhenNavigating = Settings.PowerPointSettings.SkipAnimationsWhenGoNext; } SaveSettingsToFile(); @@ -1923,6 +1943,11 @@ namespace Ink_Canvas // 执行翻页 if (_pptManager?.TryNavigatePrevious() == true) { + // 若启用了“翻页时跳过PPT动画”,显示导航后把焦点拉回本窗口 + if (Settings.PowerPointSettings.SkipAnimationsWhenGoNext) + { + try { this.Activate(); } catch { } + } } else { @@ -1961,6 +1986,17 @@ namespace Ink_Canvas // 执行翻页 if (_pptManager?.TryNavigateNext() == true) { + // 若启用了“翻页时跳过PPT动画”,翻页后主动把焦点拉回本窗口,避免 PPT 抢焦点 + if (Settings.PowerPointSettings.SkipAnimationsWhenGoNext) + { + try + { + this.Activate(); + } + catch + { + } + } } else { @@ -2097,6 +2133,11 @@ namespace Ink_Canvas if (_pptManager.TryShowSlideNavigation()) { LogHelper.WriteLogToFile("成功显示PPT幻灯片导航", LogHelper.LogType.Trace); + // 若启用了“翻页时跳过PPT动画”,显示导航后把焦点拉回本窗口 + if (Settings.PowerPointSettings.SkipAnimationsWhenGoNext) + { + try { this.Activate(); } catch { } + } } else { diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs index 24f36aeb..d0022691 100644 --- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs +++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs @@ -680,6 +680,8 @@ namespace Ink_Canvas ToggleSwitchSupportWPS.IsOn = Settings.PowerPointSettings.IsSupportWPS; + ToggleSwitchSkipAnimationsWhenGoNext.IsOn = Settings.PowerPointSettings.SkipAnimationsWhenGoNext; + ToggleSwitchPowerPointEnhancement.IsOn = Settings.PowerPointSettings.EnablePowerPointEnhancement; ToggleSwitchAutoSaveScreenShotInPowerPoint.IsOn =