improve:PPT模块

This commit is contained in:
2025-07-20 19:31:01 +08:00
parent a714d312a8
commit e209af9c57
+25 -48
View File
@@ -1348,66 +1348,43 @@ namespace Ink_Canvas {
{ {
try try
{ {
// 检查是否有其他WPS窗口打开
var wpsProcesses = Process.GetProcessesByName("wpp");
if (wpsProcesses.Length > 1)
{
LogHelper.WriteLogToFile($"检测到{wpsProcesses.Length}个WPP进程", LogHelper.LogType.Trace);
return true;
}
// 检查是否有WPS相关的其他进程
var kingsoftProcesses = Process.GetProcessesByName("wps");
if (kingsoftProcesses.Length > 0)
{
LogHelper.WriteLogToFile("检测到WPS主程序进程", LogHelper.LogType.Trace);
return true;
}
// 检查是否有其他WPS相关进程
var etProcesses = Process.GetProcessesByName("et"); // WPS表格
var wpsProcesses2 = Process.GetProcessesByName("wps"); // WPS文字
if (etProcesses.Length > 0 || wpsProcesses2.Length > 0)
{
LogHelper.WriteLogToFile($"检测到其他WPS组件进程:ET进程{etProcesses.Length}个,WPS进程{wpsProcesses2.Length}个", LogHelper.LogType.Trace);
return true;
}
// 检查当前WPP进程是否有多个窗口
if (wppProcess != null) if (wppProcess != null)
{ {
try int windowCount = 0;
EnumWindows((hWnd, lParam) =>
{ {
var windowCount = 0; try
foreach (ProcessThread thread in wppProcess.Threads)
{ {
// 简单检查是否有多个窗口句柄 uint windowProcessId;
if (thread.ThreadState == System.Diagnostics.ThreadState.Running) GetWindowThreadProcessId(hWnd, out windowProcessId);
if (windowProcessId == wppProcess.Id)
{ {
windowCount++; // 检查窗口标题是否为空,避免统计后台窗口
var windowTitle = new System.Text.StringBuilder(256);
GetWindowText(hWnd, windowTitle, 256);
var title = windowTitle.ToString().Trim();
if (!string.IsNullOrEmpty(title))
{
windowCount++;
}
} }
} }
catch { }
if (windowCount > 1) return true;
{ }, IntPtr.Zero);
LogHelper.WriteLogToFile($"当前WPP进程有{windowCount}个活动线程,可能存在多个窗口", LogHelper.LogType.Trace);
return true;
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"检查WPP进程窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
}
}
// 通过枚举窗口检查是否有其他WPS窗口 // 只要不是多文档演示(即窗口数<=1),就允许Kill
return CheckForWpsWindowsByEnumeration(); if (windowCount <= 1)
return false; // 没有其他文档窗口,可以Kill
else
return true; // 有多个窗口,说明是多文档演示,不Kill
}
} }
catch (Exception ex) catch (Exception ex)
{ {
LogHelper.WriteLogToFile($"检查其他WPS窗口失败: {ex.ToString()}", LogHelper.LogType.Error); LogHelper.WriteLogToFile($"检查WPP进程窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
return false; // 出错时保守处理,不强制关闭
} }
return false; // 出错时,默认允许Kill
} }
private bool CheckForWpsWindowsByEnumeration() private bool CheckForWpsWindowsByEnumeration()