diff --git a/Ink Canvas/Helpers/COMPPTManager.cs b/Ink Canvas/Helpers/COMPPTManager.cs index d5eaf574..44eaf96e 100644 --- a/Ink Canvas/Helpers/COMPPTManager.cs +++ b/Ink Canvas/Helpers/COMPPTManager.cs @@ -13,20 +13,21 @@ namespace Ink_Canvas.Helpers /// /// 基于 COM 的 PPT 联动管理器 /// - public class ComPPTManager : IDisposable + public class ComPPTManager : IPPTLinkManager { #region Events - public event Action SlideShowBegin; - public event Action SlideShowNextSlide; - public event Action SlideShowEnd; - public event Action PresentationOpen; - public event Action PresentationClose; + public event Action SlideShowBegin; + public event Action SlideShowNextSlide; + public event Action SlideShowEnd; + public event Action PresentationOpen; + public event Action PresentationClose; public event Action PPTConnectionChanged; public event Action SlideShowStateChanged; #endregion #region Properties public Microsoft.Office.Interop.PowerPoint.Application PPTApplication { get; private set; } + object IPPTLinkManager.PPTApplication => PPTApplication; public Presentation CurrentPresentation { get; private set; } public Slides CurrentSlides { get; private set; } public Slide CurrentSlide { get; private set; } @@ -961,7 +962,7 @@ namespace Ink_Canvas.Helpers } } - public Presentation GetCurrentActivePresentation() + public object GetCurrentActivePresentation() { try { diff --git a/Ink Canvas/Helpers/IPPTLinkManager.cs b/Ink Canvas/Helpers/IPPTLinkManager.cs new file mode 100644 index 00000000..cf8004ae --- /dev/null +++ b/Ink Canvas/Helpers/IPPTLinkManager.cs @@ -0,0 +1,44 @@ +using System; +using Microsoft.Office.Interop.PowerPoint; + +namespace Ink_Canvas.Helpers +{ + public interface IPPTLinkManager : IDisposable + { + event Action SlideShowBegin; + event Action SlideShowNextSlide; + event Action SlideShowEnd; + event Action PresentationOpen; + event Action PresentationClose; + event Action PPTConnectionChanged; + event Action SlideShowStateChanged; + + bool IsConnected { get; } + bool IsInSlideShow { get; } + bool IsSupportWPS { get; set; } + int SlidesCount { get; } + + object PPTApplication { get; } + + // 生命周期管理 + void StartMonitoring(); + void StopMonitoring(); + + // 放映控制 + bool TryStartSlideShow(); + bool TryEndSlideShow(); + + // 导航控制 + bool TryNavigateToSlide(int slideNumber); + bool TryNavigateNext(); + bool TryNavigatePrevious(); + + // 查询 + int GetCurrentSlideNumber(); + string GetPresentationName(); + bool TryShowSlideNavigation(); + object GetCurrentActivePresentation(); + } +} + + diff --git a/Ink Canvas/Helpers/ROTPPTManager.cs b/Ink Canvas/Helpers/ROTPPTManager.cs index 3de63ddf..001da50c 100644 --- a/Ink Canvas/Helpers/ROTPPTManager.cs +++ b/Ink Canvas/Helpers/ROTPPTManager.cs @@ -17,13 +17,14 @@ namespace Ink_Canvas.Helpers /// /// PPT联动管理器 - 统一管理PPT和WPS的连接、事件处理和进程管理 /// - public class PPTManager : IDisposable + public class PPTManager : IPPTLinkManager { #region Events public event Action SlideShowBegin; public event Action SlideShowNextSlide; public event Action SlideShowEnd; public event Action PresentationOpen; + public event Action PresentationClose; public event Action PPTConnectionChanged; public event Action SlideShowStateChanged; #endregion diff --git a/Ink Canvas/MainWindow_cs/MW_ROTPPT.cs b/Ink Canvas/MainWindow_cs/MW_ROTPPT.cs index d755c0a7..25d7e246 100644 --- a/Ink Canvas/MainWindow_cs/MW_ROTPPT.cs +++ b/Ink Canvas/MainWindow_cs/MW_ROTPPT.cs @@ -105,14 +105,13 @@ namespace Ink_Canvas #endregion #region PPT Managers - private PPTManager _pptManager; + private IPPTLinkManager _pptManager; private PPTInkManager _singlePPTInkManager; private PPTUIManager _pptUIManager; - /// - /// 获取PPT管理器实例 - /// - public PPTManager PPTManager => _pptManager; + private bool IsUsingRotPptLink => Settings.PowerPointSettings.UseRotPptLink; + + public IPPTLinkManager PPTManager => _pptManager; #endregion #region PPT Manager Initialization @@ -120,11 +119,25 @@ namespace Ink_Canvas { try { + try + { + _pptManager?.StopMonitoring(); + } + catch + { + } + // 初始化长按定时器 InitializeLongPressTimer(); - // 初始化PPT管理器 - _pptManager = new PPTManager(); + if (IsUsingRotPptLink) + { + _pptManager = new PPTManager(); + } + else + { + _pptManager = new ComPPTManager(); + } _pptManager.IsSupportWPS = Settings.PowerPointSettings.IsSupportWPS; // 注册事件