From 266c5c0dc8c400521a8ce1c2428788b61bde52e5 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sun, 18 Jan 2026 02:27:48 +0800 Subject: [PATCH] =?UTF-8?q?improve:PPT=E8=81=94=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/Helpers/PPTManager.cs | 54 +++++++++++++++++--- Ink Canvas/Helpers/PPTROTConnectionHelper.cs | 2 +- 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/Ink Canvas/Helpers/PPTManager.cs b/Ink Canvas/Helpers/PPTManager.cs index 2058d0cc..d6f1da9e 100644 --- a/Ink Canvas/Helpers/PPTManager.cs +++ b/Ink Canvas/Helpers/PPTManager.cs @@ -318,7 +318,7 @@ namespace Ink_Canvas.Helpers { LogHelper.WriteLogToFile("检测到演示文稿切换,断开连接", LogHelper.LogType.Trace); DisconnectFromPPT(); - break; + continue; } } catch (COMException ex) when ((uint)ex.ErrorCode == 0x8001010A) @@ -347,22 +347,60 @@ namespace Ink_Canvas.Helpers { count = slideShowWindows.Count; } - PPTROTConnectionHelper.SafeReleaseComObject(slideShowWindows); if (activePresentation != null && count > 0) { isSlideShowActive = true; - slideShowWindow = activePresentation.SlideShowWindow; - if (_pptSlideShowWindow == null || !PPTROTConnectionHelper.IsValidSlideShowWindow(_pptSlideShowWindow)) + dynamic activeSlideShowWindow = null; + + try { - if (!PPTROTConnectionHelper.AreComObjectsEqual(_pptSlideShowWindow, slideShowWindow)) + for (int i = 1; i <= count; i++) { - PPTROTConnectionHelper.SafeReleaseComObject(_pptSlideShowWindow); - _pptSlideShowWindow = slideShowWindow; - LogHelper.WriteLogToFile("发现窗口,成功设置 slideshowwindow", LogHelper.LogType.Trace); + try + { + dynamic ssw = slideShowWindows[i]; + if (PPTROTConnectionHelper.IsSlideShowWindowActive(ssw)) + { + activeSlideShowWindow = ssw; + LogHelper.WriteLogToFile($"找到活跃的放映窗口: {i}/{count}", LogHelper.LogType.Trace); + break; + } + } + catch { } } } + catch { } + + if (activeSlideShowWindow == null) + { + try + { + activeSlideShowWindow = activePresentation.SlideShowWindow; + } + catch { } + } + + if (activeSlideShowWindow != null) + { + slideShowWindow = activeSlideShowWindow; + if (_pptSlideShowWindow == null || !PPTROTConnectionHelper.IsValidSlideShowWindow(_pptSlideShowWindow)) + { + if (!PPTROTConnectionHelper.AreComObjectsEqual(_pptSlideShowWindow, slideShowWindow)) + { + PPTROTConnectionHelper.SafeReleaseComObject(_pptSlideShowWindow); + _pptSlideShowWindow = slideShowWindow; + LogHelper.WriteLogToFile("发现窗口,成功设置 slideshowwindow", LogHelper.LogType.Trace); + } + } + } + + PPTROTConnectionHelper.SafeReleaseComObject(slideShowWindows); + } + else + { + PPTROTConnectionHelper.SafeReleaseComObject(slideShowWindows); } } catch (COMException ex) when ((uint)ex.ErrorCode == 0x8001010A) diff --git a/Ink Canvas/Helpers/PPTROTConnectionHelper.cs b/Ink Canvas/Helpers/PPTROTConnectionHelper.cs index 79fa21eb..e223a256 100644 --- a/Ink Canvas/Helpers/PPTROTConnectionHelper.cs +++ b/Ink Canvas/Helpers/PPTROTConnectionHelper.cs @@ -369,7 +369,7 @@ namespace Ink_Canvas.Helpers return false; } - private static bool IsSlideShowWindowActive(object sswObj) + public static bool IsSlideShowWindowActive(object sswObj) { try {