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
{
// 检查是否有其他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)
{
try
int windowCount = 0;
EnumWindows((hWnd, lParam) =>
{
var windowCount = 0;
foreach (ProcessThread thread in wppProcess.Threads)
try
{
// 简单检查是否有多个窗口句柄
if (thread.ThreadState == System.Diagnostics.ThreadState.Running)
uint windowProcessId;
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++;
}
}
}
if (windowCount > 1)
{
LogHelper.WriteLogToFile($"当前WPP进程有{windowCount}个活动线程,可能存在多个窗口", LogHelper.LogType.Trace);
return true;
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"检查WPP进程窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
}
}
catch { }
return true;
}, IntPtr.Zero);
// 通过枚举窗口检查是否有其他WPS窗口
return CheckForWpsWindowsByEnumeration();
// 只要不是多文档演示(即窗口数<=1),就允许Kill
if (windowCount <= 1)
return false; // 没有其他文档窗口,可以Kill
else
return true; // 有多个窗口,说明是多文档演示,不Kill
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"检查其他WPS窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
return false; // 出错时保守处理,不强制关闭
LogHelper.WriteLogToFile($"检查WPP进程窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
}
return false; // 出错时,默认允许Kill
}
private bool CheckForWpsWindowsByEnumeration()