improve:PPT模块
This commit is contained in:
@@ -1579,6 +1579,7 @@ namespace Ink_Canvas {
|
|||||||
public bool IsMaximized { get; set; }
|
public bool IsMaximized { get; set; }
|
||||||
public ForegroundWindowInfo.RECT Rect { get; set; }
|
public ForegroundWindowInfo.RECT Rect { get; set; }
|
||||||
public uint ProcessId { get; set; }
|
public uint ProcessId { get; set; }
|
||||||
|
public string ProcessName { get; set; } // 新增
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1656,6 +1657,15 @@ namespace Ink_Canvas {
|
|||||||
GetWindowThreadProcessId(hWnd, out processId);
|
GetWindowThreadProcessId(hWnd, out processId);
|
||||||
windowInfo.ProcessId = processId;
|
windowInfo.ProcessId = processId;
|
||||||
|
|
||||||
|
// 新增:获取进程名
|
||||||
|
windowInfo.ProcessName = "";
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var proc = System.Diagnostics.Process.GetProcessById((int)processId);
|
||||||
|
windowInfo.ProcessName = proc.ProcessName.ToLower();
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
|
||||||
return windowInfo;
|
return windowInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1667,58 +1677,30 @@ namespace Ink_Canvas {
|
|||||||
if (string.IsNullOrEmpty(windowInfo.Title) && string.IsNullOrEmpty(windowInfo.ClassName))
|
if (string.IsNullOrEmpty(windowInfo.Title) && string.IsNullOrEmpty(windowInfo.ClassName))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// 检查窗口标题
|
|
||||||
var title = windowInfo.Title.ToLower();
|
var title = windowInfo.Title.ToLower();
|
||||||
var className = windowInfo.ClassName.ToLower();
|
var className = windowInfo.ClassName.ToLower();
|
||||||
|
var processName = windowInfo.ProcessName ?? "";
|
||||||
|
|
||||||
// WPS相关关键词(扩展版)
|
// WPS相关关键词
|
||||||
var wpsKeywords = new[]
|
var wpsKeywords = new[] { "wps", "wpp", "kingsoft", "金山", "wps演示", "wps presentation", "wps office", "kingsoft office" };
|
||||||
{
|
// 微软Office相关进程名
|
||||||
"wps", "演示文稿", "presentation", "powerpoint", "ppt", "pptx",
|
var msOfficeProcess = new[] { "powerpnt", "excel", "word", "onenote", "outlook", "microsoftoffice", "office" };
|
||||||
"kingsoft", "金山", "office", "幻灯片", "slide", "presentation",
|
|
||||||
"wpp", "wps演示", "wps presentation", "wps office", "kingsoft 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));
|
bool hasWpsTitle = wpsKeywords.Any(keyword => title.Contains(keyword));
|
||||||
|
|
||||||
// 检查类名是否包含WPS相关关键词
|
|
||||||
bool hasWpsClass = wpsKeywords.Any(keyword => className.Contains(keyword));
|
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特有的窗口类名
|
return (hasWpsTitle || hasWpsClass || isWpsClass) && hasValidSize;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1954,9 +1936,15 @@ namespace Ink_Canvas {
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var pname = process.ProcessName.ToLower();
|
var pname = process.ProcessName.ToLower();
|
||||||
|
// 只允许WPS/WPP相关进程,排除PowerPoint及微软Office
|
||||||
if ((pname.Contains("wps") || pname.Contains("wpp") || pname.Contains("presentation"))
|
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);
|
wpsProcesses.Add(process);
|
||||||
LogHelper.WriteLogToFile($"发现WPS进程: {process.ProcessName} (PID: {process.Id})", LogHelper.LogType.Trace);
|
LogHelper.WriteLogToFile($"发现WPS进程: {process.ProcessName} (PID: {process.Id})", LogHelper.LogType.Trace);
|
||||||
|
|||||||
Reference in New Issue
Block a user