diff --git a/Ink Canvas/Helpers/GlobalHotkeyManager.cs b/Ink Canvas/Helpers/GlobalHotkeyManager.cs index b5ba3f40..046ac0e9 100644 --- a/Ink Canvas/Helpers/GlobalHotkeyManager.cs +++ b/Ink Canvas/Helpers/GlobalHotkeyManager.cs @@ -3,6 +3,7 @@ using NHotkey.Wpf; using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Reflection; using System.Text; using System.Windows.Input; @@ -19,6 +20,7 @@ namespace Ink_Canvas.Helpers private readonly MainWindow _mainWindow; private bool _isDisposed; private bool _hotkeysShouldBeRegistered = true; // 启动时注册热键 + private bool _enableHotkeysInMouseMode = false; // 是否在鼠标模式下启用快捷键 // 配置文件路径 private static readonly string HotkeyConfigFile = Path.Combine(App.RootPath, "HotkeyConfig.json"); @@ -402,9 +404,19 @@ namespace Ink_Canvas.Helpers { if (isMouseMode) { - // 鼠标模式下禁用快捷键,让键盘操作放行 - DisableHotkeyRegistration(); - LogHelper.WriteLogToFile("切换到鼠标模式,禁用快捷键以放行键盘操作"); + // 鼠标模式下根据设置决定是否禁用快捷键 + if (_enableHotkeysInMouseMode) + { + // 如果启用了鼠标模式快捷键,则保持快捷键注册 + EnableHotkeyRegistration(); + LogHelper.WriteLogToFile("切换到鼠标模式,但保持快捷键启用(用户设置)"); + } + else + { + // 如果未启用鼠标模式快捷键,则禁用快捷键以放行键盘操作 + DisableHotkeyRegistration(); + LogHelper.WriteLogToFile("切换到鼠标模式,禁用快捷键以放行键盘操作"); + } } else { @@ -808,6 +820,251 @@ namespace Ink_Canvas.Helpers } } + /// + /// 设置是否在鼠标模式下启用快捷键 + /// + /// 是否启用 + public void SetEnableHotkeysInMouseMode(bool enable) + { + try + { + _enableHotkeysInMouseMode = enable; + + // 保存到主设置配置文件 + SaveMouseModeHotkeySettingToMainConfig(); + + LogHelper.WriteLogToFile($"设置鼠标模式快捷键开关: {enable}"); + + // 立即应用设置,如果当前是鼠标模式则重新更新状态 + var isCurrentlyMouseMode = IsInSelectMode(); + if (isCurrentlyMouseMode) + { + UpdateHotkeyStateForToolMode(true); + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"设置鼠标模式快捷键开关时出错: {ex.Message}", LogHelper.LogType.Error); + } + } + + /// + /// 获取是否在鼠标模式下启用快捷键 + /// + /// 是否启用 + public bool GetEnableHotkeysInMouseMode() + { + try + { + // 从主设置配置文件加载设置 + LoadMouseModeHotkeySettingFromMainConfig(); + return _enableHotkeysInMouseMode; + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"获取鼠标模式快捷键开关时出错: {ex.Message}", LogHelper.LogType.Error); + return false; // 默认关闭 + } + } + + /// + /// 从主设置配置文件加载鼠标模式快捷键设置 + /// + private void LoadMouseModeHotkeySettingFromMainConfig() + { + try + { + // 通过反射访问主窗口的Settings属性 + var settingsProperty = _mainWindow.GetType().GetProperty("Settings", BindingFlags.Public | BindingFlags.Instance); + if (settingsProperty != null) + { + var settings = settingsProperty.GetValue(_mainWindow); + if (settings != null) + { + // 获取Advanced属性 + var advancedProperty = settings.GetType().GetProperty("Advanced"); + if (advancedProperty != null) + { + var advanced = advancedProperty.GetValue(settings); + if (advanced != null) + { + // 获取EnableHotkeysInMouseMode属性 + var enableHotkeysProperty = advanced.GetType().GetProperty("EnableHotkeysInMouseMode"); + if (enableHotkeysProperty != null) + { + var value = enableHotkeysProperty.GetValue(advanced); + if (value is bool boolValue) + { + _enableHotkeysInMouseMode = boolValue; + LogHelper.WriteLogToFile($"从主设置配置文件加载鼠标模式快捷键设置: {_enableHotkeysInMouseMode}"); + return; + } + } + } + } + } + } + + // 如果无法从主设置加载,使用默认值 + _enableHotkeysInMouseMode = false; + LogHelper.WriteLogToFile("无法从主设置配置文件加载鼠标模式快捷键设置,使用默认值: false"); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"从主设置配置文件加载鼠标模式快捷键设置时出错: {ex.Message}", LogHelper.LogType.Error); + _enableHotkeysInMouseMode = false; // 默认关闭 + } + } + + /// + /// 从配置文件加载鼠标模式快捷键设置(旧方法,保留兼容性) + /// + private void LoadMouseModeHotkeySetting() + { + try + { + if (!File.Exists(HotkeyConfigFile)) + { + _enableHotkeysInMouseMode = false; // 默认关闭 + return; + } + + var json = File.ReadAllText(HotkeyConfigFile, Encoding.UTF8); + var config = JsonConvert.DeserializeObject(json); + + if (config != null) + { + // 查找鼠标模式快捷键设置 + var mouseModeSetting = config.Hotkeys?.FirstOrDefault(h => h.Name == "EnableHotkeysInMouseMode"); + if (mouseModeSetting != null) + { + _enableHotkeysInMouseMode = mouseModeSetting.EnableHotkeysInMouseMode; + LogHelper.WriteLogToFile($"从配置文件加载鼠标模式快捷键设置: {_enableHotkeysInMouseMode}"); + } + else + { + _enableHotkeysInMouseMode = false; // 默认关闭 + } + } + else + { + _enableHotkeysInMouseMode = false; // 默认关闭 + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"从配置文件加载鼠标模式快捷键设置时出错: {ex.Message}", LogHelper.LogType.Error); + _enableHotkeysInMouseMode = false; // 默认关闭 + } + } + + /// + /// 保存鼠标模式快捷键设置到主设置配置文件 + /// + private void SaveMouseModeHotkeySettingToMainConfig() + { + try + { + // 通过反射访问主窗口的Settings属性 + var settingsProperty = _mainWindow.GetType().GetProperty("Settings", BindingFlags.Public | BindingFlags.Instance); + if (settingsProperty != null) + { + var settings = settingsProperty.GetValue(_mainWindow); + if (settings != null) + { + // 获取Advanced属性 + var advancedProperty = settings.GetType().GetProperty("Advanced"); + if (advancedProperty != null) + { + var advanced = advancedProperty.GetValue(settings); + if (advanced != null) + { + // 设置EnableHotkeysInMouseMode属性 + var enableHotkeysProperty = advanced.GetType().GetProperty("EnableHotkeysInMouseMode"); + if (enableHotkeysProperty != null) + { + enableHotkeysProperty.SetValue(advanced, _enableHotkeysInMouseMode); + + // 触发主窗口的保存设置方法 + var saveSettingsMethod = _mainWindow.GetType().GetMethod("SaveSettings", BindingFlags.NonPublic | BindingFlags.Instance); + if (saveSettingsMethod != null) + { + saveSettingsMethod.Invoke(_mainWindow, null); + LogHelper.WriteLogToFile($"保存鼠标模式快捷键设置到主设置配置文件: {_enableHotkeysInMouseMode}"); + } + else + { + LogHelper.WriteLogToFile("无法找到SaveSettings方法", LogHelper.LogType.Warning); + } + } + } + } + } + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"保存鼠标模式快捷键设置到主设置配置文件时出错: {ex.Message}", LogHelper.LogType.Error); + } + } + + /// + /// 保存鼠标模式快捷键设置到配置文件(旧方法,保留兼容性) + /// + private void SaveMouseModeHotkeySetting() + { + try + { + HotkeyConfig config; + + if (File.Exists(HotkeyConfigFile)) + { + var json = File.ReadAllText(HotkeyConfigFile, Encoding.UTF8); + config = JsonConvert.DeserializeObject(json) ?? new HotkeyConfig(); + } + else + { + config = new HotkeyConfig(); + } + + // 确保Hotkeys列表存在 + if (config.Hotkeys == null) + { + config.Hotkeys = new List(); + } + + // 查找或创建鼠标模式快捷键设置项 + var mouseModeSetting = config.Hotkeys.FirstOrDefault(h => h.Name == "EnableHotkeysInMouseMode"); + if (mouseModeSetting == null) + { + mouseModeSetting = new HotkeyConfigItem + { + Name = "EnableHotkeysInMouseMode", + EnableHotkeysInMouseMode = _enableHotkeysInMouseMode + }; + config.Hotkeys.Add(mouseModeSetting); + } + else + { + mouseModeSetting.EnableHotkeysInMouseMode = _enableHotkeysInMouseMode; + } + + // 更新配置信息 + config.Version = "1.0"; + config.LastModified = DateTime.Now; + + // 保存到文件 + var jsonString = JsonConvert.SerializeObject(config, Formatting.Indented); + File.WriteAllText(HotkeyConfigFile, jsonString, Encoding.UTF8); + + LogHelper.WriteLogToFile($"保存鼠标模式快捷键设置到配置文件: {_enableHotkeysInMouseMode}"); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"保存鼠标模式快捷键设置到配置文件时出错: {ex.Message}", LogHelper.LogType.Error); + } + } + #endregion @@ -858,6 +1115,7 @@ namespace Ink_Canvas.Helpers public string Name { get; set; } public Key Key { get; set; } public ModifierKeys Modifiers { get; set; } + public bool EnableHotkeysInMouseMode { get; set; } } #endregion } diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs index 642d4868..2f887d58 100644 --- a/Ink Canvas/MainWindow_cs/MW_PPT.cs +++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs @@ -84,7 +84,7 @@ namespace Ink_Canvas private DispatcherTimer _longPressTimer; private bool _isLongPressNext = true; // true为下一页,false为上一页 private const int LongPressDelay = 500; // 长按延迟时间(毫秒) - private const int LongPressInterval = 15; // 长按翻页间隔(毫秒) + private const int LongPressInterval = 50; // 长按翻页间隔(毫秒) // PowerPoint应用程序守护相关字段 private DispatcherTimer _powerPointProcessMonitorTimer; diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs index 024b7788..d8c6ac3a 100644 --- a/Ink Canvas/Resources/Settings.cs +++ b/Ink Canvas/Resources/Settings.cs @@ -498,6 +498,9 @@ namespace Ink_Canvas [JsonProperty("isEnableAvoidFullScreenHelper")] public bool IsEnableAvoidFullScreenHelper { get; set; } + [JsonProperty("enableHotkeysInMouseMode")] + public bool EnableHotkeysInMouseMode { get; set; } = false; + [JsonProperty("isAutoBackupBeforeUpdate")] public bool IsAutoBackupBeforeUpdate { get; set; } = true; diff --git a/Ink Canvas/Windows/HotkeySettingsWindow.xaml b/Ink Canvas/Windows/HotkeySettingsWindow.xaml index 8b008b07..e8c41995 100644 --- a/Ink Canvas/Windows/HotkeySettingsWindow.xaml +++ b/Ink Canvas/Windows/HotkeySettingsWindow.xaml @@ -49,6 +49,20 @@ Margin="0,0,0,20" Foreground="#666666"/> + + + + + + + + diff --git a/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs b/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs index f4d1895e..f92949f9 100644 --- a/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs +++ b/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs @@ -153,6 +153,9 @@ namespace Ink_Canvas.Windows LogHelper.WriteLogToFile($"设置默认显示值: {hotkeyItem.HotkeyName}"); } } + + // 加载鼠标模式快捷键设置 + LoadMouseModeHotkeySetting(); } catch (Exception ex) { @@ -239,6 +242,9 @@ namespace Ink_Canvas.Windows { hotkeyItem.HotkeyChanged += OnHotkeyChanged; } + + // 为鼠标模式快捷键开关设置事件处理器 + EnableHotkeysInMouseModeToggle.Toggled += EnableHotkeysInMouseModeToggle_Toggled; } private void OnHotkeyChanged(object sender, HotkeyChangedEventArgs e) @@ -555,6 +561,44 @@ namespace Ink_Canvas.Windows MessageBox.Show($"保存快捷键设置时出错: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); } } + + /// + /// 鼠标模式快捷键开关切换事件 + /// + private void EnableHotkeysInMouseModeToggle_Toggled(object sender, RoutedEventArgs e) + { + try + { + var isEnabled = EnableHotkeysInMouseModeToggle.IsOn; + LogHelper.WriteLogToFile($"鼠标模式快捷键开关状态变更: {isEnabled}"); + + // 立即更新快捷键管理器的设置 + _hotkeyManager.SetEnableHotkeysInMouseMode(isEnabled); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"处理鼠标模式快捷键开关切换时出错: {ex.Message}", LogHelper.LogType.Error); + } + } + + /// + /// 加载鼠标模式快捷键设置 + /// + private void LoadMouseModeHotkeySetting() + { + try + { + var isEnabled = _hotkeyManager.GetEnableHotkeysInMouseMode(); + EnableHotkeysInMouseModeToggle.IsOn = isEnabled; + LogHelper.WriteLogToFile($"从主设置配置文件加载鼠标模式快捷键设置: {isEnabled}"); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"加载鼠标模式快捷键设置时出错: {ex.Message}", LogHelper.LogType.Error); + // 默认关闭 + EnableHotkeysInMouseModeToggle.IsOn = false; + } + } #endregion } diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache index 771b061a..44b9fc73 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