improve:PPT模块
This commit is contained in:
@@ -1579,6 +1579,7 @@ namespace Ink_Canvas {
|
||||
public bool IsMaximized { get; set; }
|
||||
public ForegroundWindowInfo.RECT Rect { get; set; }
|
||||
public uint ProcessId { get; set; }
|
||||
public string ProcessName { get; set; } // 新增
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1656,6 +1657,15 @@ namespace Ink_Canvas {
|
||||
GetWindowThreadProcessId(hWnd, out processId);
|
||||
windowInfo.ProcessId = processId;
|
||||
|
||||
// 新增:获取进程名
|
||||
windowInfo.ProcessName = "";
|
||||
try
|
||||
{
|
||||
var proc = System.Diagnostics.Process.GetProcessById((int)processId);
|
||||
windowInfo.ProcessName = proc.ProcessName.ToLower();
|
||||
}
|
||||
catch { }
|
||||
|
||||
return windowInfo;
|
||||
}
|
||||
|
||||
@@ -1667,58 +1677,30 @@ namespace Ink_Canvas {
|
||||
if (string.IsNullOrEmpty(windowInfo.Title) && string.IsNullOrEmpty(windowInfo.ClassName))
|
||||
return false;
|
||||
|
||||
// 检查窗口标题
|
||||
var title = windowInfo.Title.ToLower();
|
||||
var className = windowInfo.ClassName.ToLower();
|
||||
var processName = windowInfo.ProcessName ?? "";
|
||||
|
||||
// WPS相关关键词(扩展版)
|
||||
var wpsKeywords = new[]
|
||||
{
|
||||
"wps", "演示文稿", "presentation", "powerpoint", "ppt", "pptx",
|
||||
"kingsoft", "金山", "office", "幻灯片", "slide", "presentation",
|
||||
"wpp", "wps演示", "wps presentation", "wps office", "kingsoft office"
|
||||
};
|
||||
// WPS相关关键词
|
||||
var wpsKeywords = new[] { "wps", "wpp", "kingsoft", "金山", "wps演示", "wps presentation", "wps office", "kingsoft office" };
|
||||
// 微软Office相关进程名
|
||||
var msOfficeProcess = new[] { "powerpnt", "excel", "word", "onenote", "outlook", "microsoftoffice", "office" };
|
||||
|
||||
// 检查标题是否包含WPS相关关键词
|
||||
// 只要进程名是微软Office,直接排除
|
||||
if (msOfficeProcess.Any(keyword => processName.Contains(keyword)))
|
||||
return false;
|
||||
|
||||
// 只要进程名是WPS/WPP/Kingsoft,直接通过
|
||||
if (wpsKeywords.Any(keyword => processName.Contains(keyword)))
|
||||
return true;
|
||||
|
||||
// 标题或类名包含WPS相关关键词
|
||||
bool hasWpsTitle = wpsKeywords.Any(keyword => title.Contains(keyword));
|
||||
|
||||
// 检查类名是否包含WPS相关关键词
|
||||
bool hasWpsClass = wpsKeywords.Any(keyword => className.Contains(keyword));
|
||||
bool isWpsClass = className.Contains("wps") || className.Contains("kingsoft") || className.Contains("wpp");
|
||||
bool hasValidSize = (windowInfo.Rect.Right - windowInfo.Rect.Left) > 0 && (windowInfo.Rect.Bottom - windowInfo.Rect.Top) > 0;
|
||||
|
||||
// 检查是否为WPS特有的窗口类名
|
||||
bool isWpsClass = className.Contains("wps") ||
|
||||
className.Contains("kingsoft") ||
|
||||
className.Contains("presentation") ||
|
||||
className.Contains("powerpoint") ||
|
||||
className.Contains("wpp") ||
|
||||
className.Contains("office");
|
||||
|
||||
// 检查窗口是否有有效尺寸(排除0尺寸窗口)
|
||||
bool hasValidSize = (windowInfo.Rect.Right - windowInfo.Rect.Left) > 0 &&
|
||||
(windowInfo.Rect.Bottom - windowInfo.Rect.Top) > 0;
|
||||
|
||||
// 检查窗口是否可见且不是最小化状态
|
||||
bool isActiveWindow = windowInfo.IsVisible && !windowInfo.IsMinimized;
|
||||
|
||||
// 检查是否为前台窗口
|
||||
bool isForegroundWindow = windowInfo.Handle == GetForegroundWindow();
|
||||
|
||||
// 综合判断是否为WPS窗口
|
||||
bool isWpsWindow = (hasWpsTitle || hasWpsClass || isWpsClass) && hasValidSize;
|
||||
|
||||
// 如果是前台窗口且包含相关关键词,更可能是WPS窗口
|
||||
if (isForegroundWindow && (hasWpsTitle || hasWpsClass))
|
||||
{
|
||||
isWpsWindow = true;
|
||||
}
|
||||
|
||||
if (isWpsWindow)
|
||||
{
|
||||
var windowType = isForegroundWindow ? "前台" : (isActiveWindow ? "活跃" : "后台");
|
||||
LogHelper.WriteLogToFile($"确认WPS窗口: 标题='{windowInfo.Title}', 类名='{windowInfo.ClassName}', 类型={windowType}, 尺寸={windowInfo.Rect.Right - windowInfo.Rect.Left}x{windowInfo.Rect.Bottom - windowInfo.Rect.Top}", LogHelper.LogType.Trace);
|
||||
}
|
||||
|
||||
return isWpsWindow;
|
||||
return (hasWpsTitle || hasWpsClass || isWpsClass) && hasValidSize;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1954,9 +1936,15 @@ namespace Ink_Canvas {
|
||||
try
|
||||
{
|
||||
var pname = process.ProcessName.ToLower();
|
||||
// 只允许WPS/WPP相关进程,排除PowerPoint及微软Office
|
||||
if ((pname.Contains("wps") || pname.Contains("wpp") || pname.Contains("presentation"))
|
||||
// 排除PowerPoint官方进程
|
||||
&& !pname.Contains("powerpnt"))
|
||||
&& !pname.Contains("powerpnt")
|
||||
&& !pname.Contains("office")
|
||||
&& !pname.Contains("onenote")
|
||||
&& !pname.Contains("excel")
|
||||
&& !pname.Contains("word")
|
||||
&& !pname.Contains("outlook")
|
||||
&& !pname.Contains("microsoft"))
|
||||
{
|
||||
wpsProcesses.Add(process);
|
||||
LogHelper.WriteLogToFile($"发现WPS进程: {process.ProcessName} (PID: {process.Id})", LogHelper.LogType.Trace);
|
||||
|
||||
Reference in New Issue
Block a user