优化代码

This commit is contained in:
2025-07-28 14:40:44 +08:00
parent f38313ff2c
commit f03733da04
66 changed files with 1333 additions and 1294 deletions
+107 -103
View File
@@ -1,25 +1,31 @@
using Ink_Canvas.Helpers;
using Microsoft.Office.Interop.PowerPoint;
using System;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Forms;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using Ink_Canvas.Helpers;
using iNKORE.UI.WPF.Modern;
using Microsoft.Office.Core;
using Microsoft.Office.Interop.PowerPoint;
using Application = System.Windows.Application;
using File = System.IO.File;
using MessageBox = System.Windows.MessageBox;
using iNKORE.UI.WPF.Modern;
using Microsoft.Office.Core;
using MouseEventArgs = System.Windows.Input.MouseEventArgs;
using Point = System.Drawing.Point;
using Timer = System.Timers.Timer;
namespace Ink_Canvas {
public partial class MainWindow : Window {
@@ -30,7 +36,7 @@ namespace Ink_Canvas {
private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);
[DllImport("user32.dll")]
private static extern int GetWindowText(IntPtr hWnd, System.Text.StringBuilder lpString, int nMaxCount);
private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll")]
private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId, out uint lpdwThreadId);
@@ -60,7 +66,7 @@ namespace Ink_Canvas {
private static extern bool GetWindowRect(IntPtr hWnd, out ForegroundWindowInfo.RECT lpRect);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int GetClassName(IntPtr hWnd, System.Text.StringBuilder lpClassName, int nMaxCount);
private static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
private const int GWL_STYLE = -16;
private const int WS_VISIBLE = 0x10000000;
@@ -72,14 +78,14 @@ namespace Ink_Canvas {
private delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
public static Microsoft.Office.Interop.PowerPoint.Application pptApplication = null;
public static Presentation presentation = null;
public static Slides slides = null;
public static Slide slide = null;
public static int slidescount = 0;
public static Microsoft.Office.Interop.PowerPoint.Application pptApplication;
public static Presentation presentation;
public static Slides slides;
public static Slide slide;
public static int slidescount;
// 在类中添加字段
private bool wasFloatingBarFoldedWhenEnterSlideShow = false;
private bool wasFloatingBarFoldedWhenEnterSlideShow;
// 新增:用于控制WPS强制关闭提示只弹一次
private static bool hasShownWpsForceCloseWarning = false;
@@ -115,7 +121,7 @@ namespace Ink_Canvas {
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"获取当前幻灯片失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"获取当前幻灯片失败: {ex}", LogHelper.LogType.Error);
}
}
}
@@ -125,7 +131,7 @@ namespace Ink_Canvas {
StackPanelPPTControls.Visibility = Visibility.Visible;
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"检查PPT应用程序失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"检查PPT应用程序失败: {ex}", LogHelper.LogType.Error);
//BtnCheckPPT.Visibility = Visibility.Visible;
StackPanelPPTControls.Visibility = Visibility.Collapsed;
LeftBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
@@ -145,16 +151,16 @@ namespace Ink_Canvas {
private static bool isWPSSupportOn => Settings.PowerPointSettings.IsSupportWPS;
public static bool IsShowingRestoreHiddenSlidesWindow = false;
private static bool IsShowingAutoplaySlidesWindow = false;
public static bool IsShowingRestoreHiddenSlidesWindow;
private static bool IsShowingAutoplaySlidesWindow;
// WPP 相关变量
private static Process wppProcess = null;
private static bool hasWppProcessID = false;
private static System.Timers.Timer wppProcessCheckTimer = null;
private static Process wppProcess;
private static bool hasWppProcessID;
private static Timer wppProcessCheckTimer;
private static DateTime wppProcessRecordTime = DateTime.MinValue; // 记录进程时间
private static int wppProcessCheckCount = 0; // 检查次数计数器
private static WpsWindowInfo lastForegroundWpsWindow = null; // 记录上次检测到的前台WPS窗口
private static int wppProcessCheckCount; // 检查次数计数器
private static WpsWindowInfo lastForegroundWpsWindow; // 记录上次检测到的前台WPS窗口
private static DateTime lastWindowCheckTime = DateTime.MinValue; // 记录上次窗口检查时间
@@ -191,7 +197,7 @@ namespace Ink_Canvas {
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"获取当前幻灯片失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"获取当前幻灯片失败: {ex}", LogHelper.LogType.Error);
}
}
@@ -215,14 +221,14 @@ namespace Ink_Canvas {
PptApplication_SlideShowBegin(pptApplication.SlideShowWindows[1]);
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"启动幻灯片放映失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"启动幻灯片放映失败: {ex}", LogHelper.LogType.Error);
}
}
}
catch (Exception ex)
{
// 忽略常见的COM对象失效错误
if (ex is System.Runtime.InteropServices.COMException comEx)
if (ex is COMException comEx)
{
uint hr = (uint)comEx.HResult;
// 0x800401E3: 操作无法使用
@@ -237,7 +243,7 @@ namespace Ink_Canvas {
return;
}
}
LogHelper.WriteLogToFile($"检查PPT状态失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"检查PPT状态失败: {ex}", LogHelper.LogType.Error);
Application.Current.Dispatcher.Invoke(() => { BtnPPTSlideShow.Visibility = Visibility.Collapsed; });
timerCheckPPT.Start();
}
@@ -262,7 +268,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"跳转到首页失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"跳转到首页失败: {ex}", LogHelper.LogType.Error);
}
}), DispatcherPriority.Normal);
}
@@ -295,16 +301,16 @@ namespace Ink_Canvas {
presentation.Windows[1].View.GotoSlide(page);
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"跳转到指定页面失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"跳转到指定页面失败: {ex}", LogHelper.LogType.Error);
}
}).ShowDialog();
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"读取上次播放位置失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"读取上次播放位置失败: {ex}", LogHelper.LogType.Error);
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"处理上次播放页跳转失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"处理上次播放页跳转失败: {ex}", LogHelper.LogType.Error);
}
}), DispatcherPriority.Normal);
@@ -316,7 +322,7 @@ namespace Ink_Canvas {
if (slides != null)
{
foreach (Slide slide in slides)
if (slide.SlideShowTransition.Hidden == Microsoft.Office.Core.MsoTriState.msoTrue) {
if (slide.SlideShowTransition.Hidden == MsoTriState.msoTrue) {
isHaveHiddenSlide = true;
break;
}
@@ -332,13 +338,13 @@ namespace Ink_Canvas {
{
foreach (Slide slide in slides)
if (slide.SlideShowTransition.Hidden ==
Microsoft.Office.Core.MsoTriState.msoTrue)
MsoTriState.msoTrue)
slide.SlideShowTransition.Hidden =
Microsoft.Office.Core.MsoTriState.msoFalse;
MsoTriState.msoFalse;
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"取消隐藏幻灯片失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"取消隐藏幻灯片失败: {ex}", LogHelper.LogType.Error);
}
finally {
IsShowingRestoreHiddenSlidesWindow = false;
@@ -351,7 +357,7 @@ namespace Ink_Canvas {
}), DispatcherPriority.Normal);
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"检查隐藏幻灯片失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"检查隐藏幻灯片失败: {ex}", LogHelper.LogType.Error);
}
}
@@ -386,7 +392,7 @@ namespace Ink_Canvas {
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"设置手动播放模式失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"设置手动播放模式失败: {ex}", LogHelper.LogType.Error);
}
finally {
IsShowingAutoplaySlidesWindow = false;
@@ -402,12 +408,12 @@ namespace Ink_Canvas {
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"设置演示文稿播放模式失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"设置演示文稿播放模式失败: {ex}", LogHelper.LogType.Error);
}
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"检查自动播放设置失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"检查自动播放设置失败: {ex}", LogHelper.LogType.Error);
}
}
}
@@ -433,8 +439,8 @@ namespace Ink_Canvas {
}
}
private bool isPresentationHaveBlackSpace = false;
private string pptName = null;
private bool isPresentationHaveBlackSpace;
private string pptName;
private void UpdatePPTBtnStyleSettingsStatus() {
try {
@@ -600,7 +606,7 @@ namespace Ink_Canvas {
else RightSidePanelForPPTNavigation.Visibility = Visibility.Collapsed;
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"更新PPT按钮显示状态失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"更新PPT按钮显示状态失败: {ex}", LogHelper.LogType.Error);
}
}
@@ -630,7 +636,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"放映开始时跳转首页失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"放映开始时跳转首页失败: {ex}", LogHelper.LogType.Error);
}
}
@@ -644,9 +650,8 @@ namespace Ink_Canvas {
//Light
BtnExit.Foreground = Brushes.White;
ThemeManager.Current.ApplicationTheme = ApplicationTheme.Dark;
} else {
//Dark
}
//Dark
}
} else if (screenRatio == -256 / 135) { }
@@ -658,7 +663,7 @@ namespace Ink_Canvas {
pptName = Wn.Presentation.Name;
LogHelper.NewLog("Name: " + Wn.Presentation.Name);
LogHelper.NewLog("Slides Count: " + slidescount.ToString());
LogHelper.NewLog("Slides Count: " + slidescount);
//检查是否有已有墨迹,并加载
if (Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint)
@@ -685,7 +690,7 @@ namespace Ink_Canvas {
}
catch (Exception ex) {
LogHelper.WriteLogToFile(
$"Failed to load strokes on Slide {i}\n{ex.ToString()}",
$"Failed to load strokes on Slide {i}\n{ex}",
LogHelper.LogType.Error);
}
}
@@ -743,16 +748,16 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"加载当前页墨迹失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"加载当前页墨迹失败: {ex}", LogHelper.LogType.Error);
}
if (!isFloatingBarFolded) {
new Thread(new ThreadStart(() => {
new Thread(() => {
Thread.Sleep(100);
Application.Current.Dispatcher.Invoke(() => {
ViewboxFloatingBarMarginAnimation(60);
});
})).Start();
}).Start();
}
});
await Application.Current.Dispatcher.InvokeAsync(() => {
@@ -763,12 +768,12 @@ namespace Ink_Canvas {
});
}
catch (Exception ex) {
LogHelper.WriteLogToFile("PowerPoint Application Slide Show Begin Error: " + ex.ToString(), LogHelper.LogType.Error);
LogHelper.WriteLogToFile("PowerPoint Application Slide Show Begin Error: " + ex, LogHelper.LogType.Error);
LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error);
}
}
private bool isEnteredSlideShowEndEvent = false; //防止重复调用本函数导致墨迹保存失效
private bool isEnteredSlideShowEndEvent; //防止重复调用本函数导致墨迹保存失效
private async void PptApplication_SlideShowEnd(Presentation Pres) {
try {
@@ -834,11 +839,11 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"记录WPS进程失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"记录WPS进程失败: {ex}", LogHelper.LogType.Error);
}
}
LogHelper.WriteLogToFile(string.Format("PowerPoint Slide Show End"), LogHelper.LogType.Event);
LogHelper.WriteLogToFile("PowerPoint Slide Show End", LogHelper.LogType.Event);
if (isEnteredSlideShowEndEvent) {
LogHelper.WriteLogToFile("Detected previous entrance, returning");
return;
@@ -878,7 +883,7 @@ namespace Ink_Canvas {
}
catch (Exception ex) {
LogHelper.WriteLogToFile(
$"Failed to save strokes for Slide {i}\n{ex.ToString()}",
$"Failed to save strokes for Slide {i}\n{ex}",
LogHelper.LogType.Error);
if (File.Exists(folderPath + @"\" + i.ToString("0000") + ".icstk"))
File.Delete(folderPath + @"\" + i.ToString("0000") + ".icstk");
@@ -893,10 +898,9 @@ namespace Ink_Canvas {
//Light
BtnExit.Foreground = Brushes.Black;
ThemeManager.Current.ApplicationTheme = ApplicationTheme.Light;
} else {
//Dark
}
//Dark
BtnPPTSlideShow.Visibility = Visibility.Visible;
BtnPPTSlideShowEnd.Visibility = Visibility.Collapsed;
StackPanelPPTControls.Visibility = Visibility.Collapsed;
@@ -941,11 +945,11 @@ namespace Ink_Canvas {
}
}
private int previousSlideID = 0;
private int previousSlideID;
private MemoryStream[] memoryStreams = new MemoryStream[50];
private DateTime inkLockUntil = DateTime.MinValue;
private int lockedSlideIndex = 0;
private int lockedSlideIndex;
private const int InkLockMilliseconds = 500;
private void PptApplication_SlideShowNextSlide(SlideShowWindow Wn) {
@@ -980,11 +984,11 @@ namespace Ink_Canvas {
});
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"幻灯片切换事件处理失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"幻灯片切换事件处理失败: {ex}", LogHelper.LogType.Error);
}
}
private bool _isPptClickingBtnTurned = false;
private bool _isPptClickingBtnTurned;
private void BtnPPTSlidesUp_Click(object sender, RoutedEventArgs e) {
Application.Current.Dispatcher.Invoke(() => {
@@ -1023,7 +1027,7 @@ namespace Ink_Canvas {
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"PPT上一页操作异常: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"PPT上一页操作异常: {ex}", LogHelper.LogType.Error);
StackPanelPPTControls.Visibility = Visibility.Collapsed;
LeftBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
RightBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
@@ -1070,7 +1074,7 @@ namespace Ink_Canvas {
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"PPT下一页操作异常: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"PPT下一页操作异常: {ex}", LogHelper.LogType.Error);
StackPanelPPTControls.Visibility = Visibility.Collapsed;
LeftBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
RightBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
@@ -1177,7 +1181,7 @@ namespace Ink_Canvas {
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"设置PPT导航可见性失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"设置PPT导航可见性失败: {ex}", LogHelper.LogType.Error);
}
// 控制居中
@@ -1188,17 +1192,17 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"PPT翻页控件操作失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"PPT翻页控件操作失败: {ex}", LogHelper.LogType.Error);
}
}
private void BtnPPTSlideShow_Click(object sender, RoutedEventArgs e) {
new Thread(new ThreadStart(() => {
new Thread(() => {
try {
presentation.SlideShowSettings.Run();
}
catch { }
})).Start();
}).Start();
}
private async void BtnPPTSlideShowEnd_Click(object sender, RoutedEventArgs e) {
@@ -1240,11 +1244,11 @@ namespace Ink_Canvas {
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"保存当前页面墨迹失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"保存当前页面墨迹失败: {ex}", LogHelper.LogType.Error);
}
});
new Thread(new ThreadStart(() => {
new Thread(() => {
try {
// 安全访问SlideShowWindows[1]
if (pptApplication.SlideShowWindows.Count >= 1)
@@ -1257,9 +1261,9 @@ namespace Ink_Canvas {
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"退出PPT放映失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"退出PPT放映失败: {ex}", LogHelper.LogType.Error);
}
})).Start();
}).Start();
HideSubPanels("cursor");
await Task.Delay(150);
@@ -1267,7 +1271,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"结束PPT放映操作异常: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"结束PPT放映操作异常: {ex}", LogHelper.LogType.Error);
}
await Application.Current.Dispatcher.InvokeAsync(() => {
// 隐藏侧边栏退出按钮
@@ -1289,7 +1293,7 @@ namespace Ink_Canvas {
LogHelper.WriteLogToFile("手动隐藏所有放映模式按钮", LogHelper.LogType.Trace);
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"手动隐藏放映模式按钮失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"手动隐藏放映模式按钮失败: {ex}", LogHelper.LogType.Error);
}
});
}
@@ -1411,13 +1415,13 @@ namespace Ink_Canvas {
wppProcessCheckTimer.Dispose();
}
wppProcessCheckTimer = new System.Timers.Timer(500); // 改为500ms检查一次,提高响应速度
wppProcessCheckTimer = new Timer(500); // 改为500ms检查一次,提高响应速度
wppProcessCheckTimer.Elapsed += WppProcessCheckTimer_Elapsed;
wppProcessCheckTimer.Start();
LogHelper.WriteLogToFile("启动 WPP 进程检测定时器(前台窗口监控模式)", LogHelper.LogType.Trace);
}
private void WppProcessCheckTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
private void WppProcessCheckTimer_Elapsed(object sender, ElapsedEventArgs e)
{
// 新增:WPS联动未启用时不查杀wpp进程
if (!Settings.PowerPointSettings.IsSupportWPS)
@@ -1487,7 +1491,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"检查WPS文档保存状态失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"检查WPS文档保存状态失败: {ex}", LogHelper.LogType.Error);
allSaved = false; // 出错时默认不安全
}
@@ -1515,7 +1519,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"结束WPP进程失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"结束WPP进程失败: {ex}", LogHelper.LogType.Error);
// 如果常规方法失败,尝试强制结束
try
@@ -1533,7 +1537,7 @@ namespace Ink_Canvas {
}
catch (Exception forceKillEx)
{
LogHelper.WriteLogToFile($"强制结束WPP进程也失败: {forceKillEx.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"强制结束WPP进程也失败: {forceKillEx}", LogHelper.LogType.Error);
}
}
finally
@@ -1543,7 +1547,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"WPP 进程检测失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"WPP 进程检测失败: {ex}", LogHelper.LogType.Error);
StopWppProcessCheckTimer();
}
}
@@ -1568,7 +1572,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"检查WPP窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"检查WPP窗口失败: {ex}", LogHelper.LogType.Error);
}
return false; // 出错时,默认允许Kill
}
@@ -1619,14 +1623,14 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"枚举窗口时出错: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"枚举窗口时出错: {ex}", LogHelper.LogType.Error);
}
return true;
}, IntPtr.Zero);
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"获取WPS窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"获取WPS窗口失败: {ex}", LogHelper.LogType.Error);
}
return wpsWindows;
@@ -1646,12 +1650,12 @@ namespace Ink_Canvas {
};
// 获取窗口标题
var windowTitle = new System.Text.StringBuilder(256);
var windowTitle = new StringBuilder(256);
GetWindowText(hWnd, windowTitle, 256);
windowInfo.Title = windowTitle.ToString().Trim();
// 获取窗口类名
var className = new System.Text.StringBuilder(256);
var className = new StringBuilder(256);
GetClassName(hWnd, className, 256);
windowInfo.ClassName = className.ToString().Trim();
@@ -1668,7 +1672,7 @@ namespace Ink_Canvas {
windowInfo.ProcessName = "";
try
{
var proc = System.Diagnostics.Process.GetProcessById((int)processId);
var proc = Process.GetProcessById((int)processId);
windowInfo.ProcessName = proc.ProcessName.ToLower();
}
catch { }
@@ -1730,7 +1734,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"获取前台WPS窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"获取前台WPS窗口失败: {ex}", LogHelper.LogType.Error);
}
return null;
}
@@ -1805,7 +1809,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"检查前台WPS窗口状态失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"检查前台WPS窗口状态失败: {ex}", LogHelper.LogType.Error);
return false;
}
}
@@ -1837,9 +1841,9 @@ namespace Ink_Canvas {
}
// 按窗口位置排序,优先选择屏幕中央的窗口
var screenCenter = new System.Drawing.Point(
System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width / 2,
System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height / 2
var screenCenter = new Point(
Screen.PrimaryScreen.Bounds.Width / 2,
Screen.PrimaryScreen.Bounds.Height / 2
);
var sortedWindows = allWpsWindows
@@ -1854,7 +1858,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"获取顶级WPS窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"获取顶级WPS窗口失败: {ex}", LogHelper.LogType.Error);
}
return topLevelWindows;
@@ -1915,7 +1919,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"第{attempt}次尝试检查活跃WPS窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"第{attempt}次尝试检查活跃WPS窗口失败: {ex}", LogHelper.LogType.Error);
// 如果还有重试机会,等待一小段时间再重试
if (attempt < maxRetries)
@@ -1959,13 +1963,13 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"检查进程{process.ProcessName}失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"检查进程{process.ProcessName}失败: {ex}", LogHelper.LogType.Error);
}
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"获取WPS进程失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"获取WPS进程失败: {ex}", LogHelper.LogType.Error);
}
return wpsProcesses;
}
@@ -1995,7 +1999,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"调试窗口时出错: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"调试窗口时出错: {ex}", LogHelper.LogType.Error);
}
return true;
}, IntPtr.Zero);
@@ -2004,7 +2008,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"调试窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"调试窗口失败: {ex}", LogHelper.LogType.Error);
}
}
@@ -2015,7 +2019,7 @@ namespace Ink_Canvas {
var wpsWindowCount = 0;
var currentProcessId = wppProcess?.Id ?? 0;
EnumWindows((IntPtr hWnd, IntPtr lParam) =>
EnumWindows((hWnd, lParam) =>
{
try
{
@@ -2025,7 +2029,7 @@ namespace Ink_Canvas {
// 检查是否是WPP进程的窗口
if (windowProcessId == currentProcessId)
{
var windowTitle = new System.Text.StringBuilder(256);
var windowTitle = new StringBuilder(256);
GetWindowText(hWnd, windowTitle, 256);
var title = windowTitle.ToString().Trim();
@@ -2040,7 +2044,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"枚举窗口时出错: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"枚举窗口时出错: {ex}", LogHelper.LogType.Error);
}
return true; // 继续枚举
@@ -2056,7 +2060,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"通过枚举检查WPS窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"通过枚举检查WPS窗口失败: {ex}", LogHelper.LogType.Error);
return false;
}
}
@@ -2092,15 +2096,15 @@ namespace Ink_Canvas {
return "unknown";
// 使用文件路径的哈希值作为唯一标识符
using (var md5 = System.Security.Cryptography.MD5.Create())
using (var md5 = MD5.Create())
{
byte[] hashBytes = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(filePath));
byte[] hashBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(filePath));
return BitConverter.ToString(hashBytes).Replace("-", "").Substring(0, 8);
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"计算文件哈希值失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"计算文件哈希值失败: {ex}", LogHelper.LogType.Error);
return "error";
}
}
@@ -2130,7 +2134,7 @@ namespace Ink_Canvas {
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"保存当前页面墨迹失败: {ex.ToString()}", LogHelper.LogType.Error);
LogHelper.WriteLogToFile($"保存当前页面墨迹失败: {ex}", LogHelper.LogType.Error);
}
}