From d250e83df9d3f170bfc92972a8137e700d51c250 Mon Sep 17 00:00:00 2001 From: CJK_mkp <113243675+CJKmkp@users.noreply.github.com> Date: Thu, 12 Jun 2025 14:26:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=8F=AA=E8=AF=BB=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=B8=8B=E6=97=A0=E6=B3=95=E8=AF=86=E5=88=AB=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/MainWindow_cs/MW_PPT.cs | 77 +++++++++++++++++------------- 1 file changed, 44 insertions(+), 33 deletions(-) diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs index 52ef4ca9..1229debc 100644 --- a/Ink Canvas/MainWindow_cs/MW_PPT.cs +++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs @@ -31,7 +31,24 @@ namespace Ink_Canvas { try { if (pptApplication != null) { //获得演示文稿对象 - presentation = pptApplication.ActivePresentation; + try { + presentation = pptApplication.ActivePresentation; + } + catch (COMException) { + // ActivePresentation 可能因只读等原因抛异常,遍历 Presentations + presentation = null; + foreach (Presentation pres in pptApplication.Presentations) { + try { + if (pres.ReadOnly == MsoTriState.msoFalse) { + presentation = pres; + break; + } + } catch { } + } + // 如果没有可编辑的,选择第一个只读的 + if (presentation == null && pptApplication.Presentations.Count > 0) + presentation = pptApplication.Presentations[1]; + } pptApplication.SlideShowBegin += PptApplication_SlideShowBegin; pptApplication.SlideShowNextSlide += PptApplication_SlideShowNextSlide; pptApplication.SlideShowEnd += PptApplication_SlideShowEnd; @@ -90,45 +107,37 @@ namespace Ink_Canvas { // 检查是否已有初始化的 PowerPoint 实例 if (!isPowerPointInitialized) { - // 检查 WPS 进程(如果不支持则返回) + // 优先检测WPS进程 var wpsProcesses = Process.GetProcessesByName("wpp"); - if (wpsProcesses.Length > 0 && !isWPSSupportOn) - return; + var pptProcesses = Process.GetProcessesByName("POWERPNT"); - try + // 优先获取WPS实例 + if (isWPSSupportOn && wpsProcesses.Length > 0) { - if (isWPSSupportOn && wpsProcesses.Length > 0) + try { - // 优先获取WPS实例 - try - { - pptApplication = (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("wpp.Application"); - } - catch (COMException) - { - // WPS未启动或未注册 - pptApplication = null; - } + pptApplication = (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("wpp.Application"); } - if (pptApplication == null) + catch (COMException) { - // 获取PowerPoint实例 - try - { - pptApplication = (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("PowerPoint.Application"); - } - catch (COMException) - { - pptApplication = null; - } + pptApplication = null; } } - catch (Exception) + + // 如果未获取到WPS实例,尝试获取PowerPoint实例 + if (pptApplication == null && pptProcesses.Length > 0) { - pptApplication = null; + try + { + pptApplication = (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("PowerPoint.Application"); + } + catch (COMException) + { + pptApplication = null; + } } - // 如果没有找到运行中的实例,则自动创建PowerPoint进程(仅在未启用WPS支持时) + // 如果都没有找到,且未启用WPS支持,则自动创建PowerPoint进程 if (pptApplication == null && !isWPSSupportOn) { try @@ -144,12 +153,14 @@ namespace Ink_Canvas { isPowerPointInitialized = true; return; } - - // 检查 PowerPoint 进程是否还在 - var pptProcesses = Process.GetProcessesByName("POWERPNT"); + + // 检查进程是否还在 + var pptProcessesCheck = Process.GetProcessesByName("POWERPNT"); var wpsProcessesCheck = Process.GetProcessesByName("wpp"); bool isWpsMode = isWPSSupportOn && wpsProcessesCheck.Length > 0; - if ((isWpsMode && wpsProcessesCheck.Length == 0) || (!isWpsMode && pptProcesses.Length == 0)) + bool isPptMode = !isWPSSupportOn && pptProcessesCheck.Length > 0; + + if ((isWpsMode && wpsProcessesCheck.Length == 0) || (!isWpsMode && pptProcessesCheck.Length == 0)) { // 进程已关闭,清理对象 if (pptApplication != null)