From a0dc60a403c1f806cf9e29f9efa0301b8a384f22 Mon Sep 17 00:00:00 2001 From: unknown <2564608840@qq.com> Date: Fri, 18 Jul 2025 21:29:55 +0800 Subject: [PATCH] =?UTF-8?q?improve:=E8=81=94=E5=8A=A8=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/MainWindow_cs/MW_PPT.cs | 88 +++++++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs index b94529ac..3f9c08ff 100644 --- a/Ink Canvas/MainWindow_cs/MW_PPT.cs +++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs @@ -194,7 +194,7 @@ namespace Ink_Canvas { var pptProcesses = Process.GetProcessesByName("POWERPNT"); // 根据设置和进程状态决定模式 - isWPSMode = isWPSSupportOn && wpsRunning; + isWPSMode = isWPSSupportOn; LogHelper.WriteLogToFile($"初始化模式: {(isWPSMode ? "WPS" : "PowerPoint")}", LogHelper.LogType.Info); @@ -490,6 +490,18 @@ namespace Ink_Canvas { catch (Exception ex) { LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); } + // ========== 新增:WPS进程清理调用 ========== + if (isWPSMode && pptApplication != null) + { + try + { + if (pptApplication.Presentations.Count == 0) + { + TryCloseExtraWpsProcesses(); + } + } + catch { } + } } private bool isPresentationHaveBlackSpace = false; @@ -872,6 +884,18 @@ namespace Ink_Canvas { await Application.Current.Dispatcher.InvokeAsync(() => { ViewboxFloatingBarMarginAnimation(100, true); }); + // ========== 新增:WPS进程清理调用 ========== + if (isWPSMode && pptApplication != null) + { + try + { + if (pptApplication.Presentations.Count == 0) + { + TryCloseExtraWpsProcesses(); + } + } + catch { } + } } catch (Exception ex) { LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); @@ -1311,5 +1335,67 @@ namespace Ink_Canvas { base.OnClosed(e); } + + // ========== 新增:安全关闭多余WPS进程的方法 ========== + /// + /// 检查并安全关闭多余的WPS进程(仅当所有WPS都未打开PPT时) + /// + private void TryCloseExtraWpsProcesses() + { + try + { + // 检查所有WPS进程是否都没有打开PPT + bool allWpsNoPpt = true; + foreach (var processName in GetPossibleWPSProcessNames()) + { + foreach (var process in Process.GetProcessesByName(processName)) + { + try + { + dynamic wpsApp = null; + try + { + wpsApp = Marshal.GetActiveObject(processName + ".Application"); + } + catch { } + if (wpsApp != null) + { + if (wpsApp.Presentations.Count > 0) + { + allWpsNoPpt = false; + break; + } + } + } + catch { } + } + if (!allWpsNoPpt) break; + } + + if (allWpsNoPpt) + { + // 所有WPS都没有打开PPT,可以安全关闭 + foreach (var processName in GetPossibleWPSProcessNames()) + { + foreach (var process in Process.GetProcessesByName(processName)) + { + try + { + process.Kill(); + LogHelper.WriteLogToFile($"已终止WPS进程: {process.ProcessName}({process.Id})", LogHelper.LogType.Info); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"终止WPS进程失败: {ex.Message}", LogHelper.LogType.Error); + } + } + } + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"WPS进程清理异常: {ex.Message}", LogHelper.LogType.Error); + } + } } }