diff --git a/Ink Canvas/Helpers/GlobalHotkeyManager.cs b/Ink Canvas/Helpers/GlobalHotkeyManager.cs index d441f068..884df9bf 100644 --- a/Ink Canvas/Helpers/GlobalHotkeyManager.cs +++ b/Ink Canvas/Helpers/GlobalHotkeyManager.cs @@ -280,6 +280,17 @@ namespace Ink_Canvas.Helpers return; } + // 如果配置文件不存在,先创建默认配置文件 + if (!File.Exists(HotkeyConfigFile)) + { + LogHelper.WriteLogToFile($"快捷键配置文件不存在: {HotkeyConfigFile}", LogHelper.LogType.Warning); + LogHelper.WriteLogToFile("配置文件不存在,创建默认配置文件并注册默认快捷键"); + CreateDefaultConfigFile(); + RegisterDefaultHotkeys(); + _hotkeysShouldBeRegistered = true; + return; + } + // 尝试从配置文件加载 if (LoadHotkeysFromConfigFile()) { @@ -289,19 +300,9 @@ namespace Ink_Canvas.Helpers } else { - // 如果配置文件不存在或加载失败,使用默认快捷键 - if (!File.Exists(HotkeyConfigFile)) - { - LogHelper.WriteLogToFile("配置文件不存在,注册默认快捷键"); - RegisterDefaultHotkeys(); - _hotkeysShouldBeRegistered = true; - } - else - { - LogHelper.WriteLogToFile("配置文件存在但加载失败,回退到默认快捷键", LogHelper.LogType.Warning); - RegisterDefaultHotkeys(); - _hotkeysShouldBeRegistered = true; - } + LogHelper.WriteLogToFile("配置文件存在但加载失败,回退到默认快捷键", LogHelper.LogType.Warning); + RegisterDefaultHotkeys(); + _hotkeysShouldBeRegistered = true; } } catch (Exception ex) @@ -502,6 +503,70 @@ namespace Ink_Canvas.Helpers } } + /// + /// 创建默认的快捷键配置文件 + /// + private void CreateDefaultConfigFile() + { + try + { + // 确保配置目录存在 + string configDir = Path.GetDirectoryName(HotkeyConfigFile); + if (!Directory.Exists(configDir)) + { + Directory.CreateDirectory(configDir); + } + + // 创建默认配置对象 + var config = new HotkeyConfig + { + Version = "1.0", + LastModified = DateTime.Now, + Hotkeys = new List() + }; + + // 添加默认快捷键配置 + config.Hotkeys.AddRange(new[] + { + new HotkeyConfigItem { Name = "Undo", Key = Key.Z, Modifiers = ModifierKeys.Control }, + new HotkeyConfigItem { Name = "Redo", Key = Key.Y, Modifiers = ModifierKeys.Control }, + new HotkeyConfigItem { Name = "Clear", Key = Key.E, Modifiers = ModifierKeys.Control }, + new HotkeyConfigItem { Name = "Paste", Key = Key.V, Modifiers = ModifierKeys.Control }, + new HotkeyConfigItem { Name = "SelectTool", Key = Key.S, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "DrawTool", Key = Key.D, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "EraserTool", Key = Key.E, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "BlackboardTool", Key = Key.B, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "QuitDrawTool", Key = Key.Q, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "Pen1", Key = Key.D1, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "Pen2", Key = Key.D2, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "Pen3", Key = Key.D3, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "Pen4", Key = Key.D4, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "Pen5", Key = Key.D5, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "DrawLine", Key = Key.L, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "Screenshot", Key = Key.C, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "Hide", Key = Key.V, Modifiers = ModifierKeys.Alt }, + new HotkeyConfigItem { Name = "Exit", Key = Key.Escape, Modifiers = ModifierKeys.None } + }); + + // 序列化为JSON + var settings = new JsonSerializerSettings + { + Formatting = Formatting.Indented + }; + + string jsonContent = JsonConvert.SerializeObject(config, settings); + + // 写入配置文件 + File.WriteAllText(HotkeyConfigFile, jsonContent, Encoding.UTF8); + + LogHelper.WriteLogToFile($"已创建默认快捷键配置文件: {HotkeyConfigFile}", LogHelper.LogType.Event); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"创建默认快捷键配置文件时出错: {ex.Message}", LogHelper.LogType.Error); + } + } + /// /// 从配置文件加载快捷键设置 /// diff --git a/Ink Canvas/Helpers/MultiPPTInkManager.cs b/Ink Canvas/Helpers/MultiPPTInkManager.cs index 242d0c6d..c151dcec 100644 --- a/Ink Canvas/Helpers/MultiPPTInkManager.cs +++ b/Ink Canvas/Helpers/MultiPPTInkManager.cs @@ -449,7 +449,6 @@ namespace Ink_Canvas.Helpers _currentActivePresentationId = ""; } - LogHelper.WriteLogToFile($"已移除演示文稿管理器: {presentationId}", LogHelper.LogType.Trace); } catch (COMException comEx) { diff --git a/Ink Canvas/Helpers/PPTInkManager.cs b/Ink Canvas/Helpers/PPTInkManager.cs index dbcc4cdb..c4821379 100644 --- a/Ink Canvas/Helpers/PPTInkManager.cs +++ b/Ink Canvas/Helpers/PPTInkManager.cs @@ -1,6 +1,7 @@ using Microsoft.Office.Interop.PowerPoint; using System; using System.IO; +using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Text; using System.Windows.Ink; @@ -71,7 +72,20 @@ namespace Ink_Canvas.Helpers _currentPresentationId = GeneratePresentationId(presentation); // 重新初始化内存流数组 - var slideCount = presentation.Slides.Count; + int slideCount = 0; + try + { + slideCount = presentation.Slides.Count; + } + catch (COMException comEx) + { + var hr = (uint)comEx.HResult; + if (hr == 0x80048010) + { + return; + } + throw; + } _memoryStreams = new MemoryStream[slideCount + 2]; // 如果启用自动保存,尝试加载已保存的墨迹 @@ -122,7 +136,6 @@ namespace Ink_Canvas.Helpers if (ms.Length > 0) { - LogHelper.WriteLogToFile($"已保存第{slideIndex}页墨迹,大小: {ms.Length} bytes", LogHelper.LogType.Trace); } } } @@ -265,7 +278,23 @@ namespace Ink_Canvas.Helpers // 保存所有页面的墨迹 int savedCount = 0; - for (int i = 1; i <= presentation.Slides.Count && i < _memoryStreams.Length; i++) + int slideCount = 0; + + try + { + slideCount = presentation.Slides.Count; + } + catch (COMException comEx) + { + var hr = (uint)comEx.HResult; + if (hr == 0x80048010) + { + return; + } + throw; + } + + for (int i = 1; i <= slideCount && i < _memoryStreams.Length; i++) { if (_memoryStreams[i] != null) { @@ -281,7 +310,6 @@ namespace Ink_Canvas.Helpers File.WriteAllBytes(filePath, srcBuf); savedCount++; - LogHelper.WriteLogToFile($"已保存第{i}页墨迹,大小: {byteLength} bytes", LogHelper.LogType.Trace); } else { diff --git a/Ink Canvas/Helpers/PPTManager.cs b/Ink Canvas/Helpers/PPTManager.cs index 7e117680..5753b477 100644 --- a/Ink Canvas/Helpers/PPTManager.cs +++ b/Ink Canvas/Helpers/PPTManager.cs @@ -514,7 +514,6 @@ namespace Ink_Canvas.Helpers if (slideCount > 0) { SlidesCount = slideCount; - LogHelper.WriteLogToFile($"成功读取PPT页数: {slideCount}", LogHelper.LogType.Trace); } else { @@ -661,7 +660,6 @@ namespace Ink_Canvas.Helpers { UpdateCurrentPresentationInfo(); SlideShowNextSlide?.Invoke(wn); - LogHelper.WriteLogToFile($"幻灯片切换到第{wn?.View?.CurrentShowPosition}页", LogHelper.LogType.Trace); } catch (Exception ex) { diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs index 464f2a36..c6e5e916 100644 --- a/Ink Canvas/MainWindow_cs/MW_PPT.cs +++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs @@ -744,7 +744,6 @@ namespace Ink_Canvas // 使用防抖机制处理页面切换 HandleSlideSwitchWithDebounce(currentSlide, totalSlides); - LogHelper.WriteLogToFile($"幻灯片切换到第{currentSlide}页", LogHelper.LogType.Trace); }); } catch (Exception ex) @@ -1314,7 +1313,6 @@ namespace Ink_Canvas if (_pptManager?.TryNavigateNext() == true) { // 翻页成功,等待事件处理墨迹切换 - LogHelper.WriteLogToFile("成功切换到下一页", LogHelper.LogType.Trace); } else { diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache index 57d842b8..c8c2dfbd 100644 Binary files a/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache and b/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache differ