diff --git a/Ink Canvas/App.xaml.cs b/Ink Canvas/App.xaml.cs index 065caf0f..6c3dc892 100644 --- a/Ink Canvas/App.xaml.cs +++ b/Ink Canvas/App.xaml.cs @@ -8,6 +8,7 @@ using Newtonsoft.Json; using Sentry; using System; using System.Diagnostics; +using System.Globalization; using System.IO; using System.Linq; using System.Net; @@ -33,6 +34,20 @@ namespace Ink_Canvas { Mutex mutex; + public void ReleaseMutexForRestart() + { + try + { + if (mutex != null) + { + mutex.ReleaseMutex(); + mutex.Dispose(); + mutex = null; + } + } + catch { } + } + public static string[] StartArgs; public static string RootPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; @@ -697,6 +712,16 @@ namespace Ink_Canvas appStartTime = DateTime.Now; appStartupStartTime = DateTime.Now; + var resourceSet = Strings.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true); + if (resourceSet != null) + { + foreach (System.Collections.DictionaryEntry entry in resourceSet) + { + if (entry.Key is string key && entry.Value is string value) + Current.Resources[key] = value; + } + } + // 根据设置决定是否显示启动画面 if (ShouldShowSplashScreen() && !IsLaunchByFileOrUri(e.Args)) { diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml index 27f745e2..91c55768 100644 --- a/Ink Canvas/MainWindow.xaml +++ b/Ink Canvas/MainWindow.xaml @@ -656,11 +656,6 @@ FontSize="26" /> - - - - @@ -741,8 +736,6 @@ - - diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs index 00d7e870..7d909366 100644 --- a/Ink Canvas/MainWindow.xaml.cs +++ b/Ink Canvas/MainWindow.xaml.cs @@ -329,11 +329,9 @@ namespace Ink_Canvas BlackBoardRightSidePageListScrollViewer.ReleaseTouchCapture(e.TouchDevice); e.Handled = true; }; - // 初始化无焦点模式开关 - ToggleSwitchNoFocusMode.IsOn = Settings.Advanced.IsNoFocusMode; + // 应用无焦点模式设置 ApplyNoFocusMode(); - // 初始化窗口置顶开关 - ToggleSwitchAlwaysOnTop.IsOn = Settings.Advanced.IsAlwaysOnTop; + // 应用窗口置顶设置 ApplyAlwaysOnTop(); // 添加窗口激活事件处理,确保置顶状态在窗口重新激活时得到保持 @@ -1367,16 +1365,17 @@ namespace Ink_Canvas }), DispatcherPriority.Loaded); } - // 确保开关和设置同步 - ToggleSwitchNoFocusMode.IsOn = Settings.Advanced.IsNoFocusMode; + // 应用无焦点模式设置 ApplyNoFocusMode(); - ToggleSwitchAlwaysOnTop.IsOn = Settings.Advanced.IsAlwaysOnTop; + // 应用窗口置顶设置 ApplyAlwaysOnTop(); - // 初始化UIA置顶开关 - ToggleSwitchUIAccessTopMost.IsOn = Settings.Advanced.EnableUIAccessTopMost; - + // 设置UIA置顶状态 App.IsUIAccessTopMostEnabled = Settings.Advanced.EnableUIAccessTopMost; + if (Settings.Advanced.EnableUIAccessTopMost && Settings.Advanced.IsAlwaysOnTop) + { + ApplyUIAccessTopMost(); + } // 初始化橡皮擦自动切换回批注模式开关 if (ToggleSwitchEnableEraserAutoSwitchBack != null) @@ -1618,7 +1617,7 @@ namespace Ink_Canvas /// 如果该设置为 true,将窗口置为普通状态并调整到主屏幕的左上角(0,0)及主屏幕分辨率的宽高,使窗口覆盖整个主屏幕; /// 否则将窗口设为最大化状态。 /// - private void SetWindowMode() + public void SetWindowMode() { if (Settings.Advanced.WindowMode) { @@ -2997,7 +2996,7 @@ namespace Ink_Canvas } } - private void ApplyNoFocusMode() + public void ApplyNoFocusMode() { var hwnd = new WindowInteropHelper(this).Handle; int exStyle = GetWindowLong(hwnd, GWL_EXSTYLE); @@ -3017,7 +3016,7 @@ namespace Ink_Canvas } } - private void ApplyAlwaysOnTop() + public void ApplyAlwaysOnTop() { try { @@ -3209,51 +3208,6 @@ namespace Ink_Canvas } } - private void ToggleSwitchNoFocusMode_Toggled(object sender, RoutedEventArgs e) - { - if (!isLoaded) return; - var toggle = sender as ToggleSwitch; - Settings.Advanced.IsNoFocusMode = toggle != null && toggle.IsOn; - SaveSettingsToFile(); - - if (isTemporarilyDisablingNoFocusMode) - { - isTemporarilyDisablingNoFocusMode = false; - } - - ApplyNoFocusMode(); - - // 如果启用了窗口置顶,需要重新应用置顶设置以处理无焦点模式的变化 - if (Settings.Advanced.IsAlwaysOnTop) - { - ApplyAlwaysOnTop(); - } - - } - - private void ToggleSwitchAlwaysOnTop_Toggled(object sender, RoutedEventArgs e) - { - if (!isLoaded) return; - var toggle = sender as ToggleSwitch; - Settings.Advanced.IsAlwaysOnTop = toggle != null && toggle.IsOn; - SaveSettingsToFile(); - ApplyAlwaysOnTop(); - } - - private void ToggleSwitchUIAccessTopMost_Toggled(object sender, RoutedEventArgs e) - { - if (!isLoaded) return; - var toggle = sender as ToggleSwitch; - bool newValue = toggle != null && toggle.IsOn; - - Settings.Advanced.EnableUIAccessTopMost = newValue; - SaveSettingsToFile(); - ApplyUIAccessTopMost(); - - App.IsUIAccessTopMostEnabled = newValue; - - } - private void Window_Activated(object sender, EventArgs e) { // 窗口激活时,如果启用了置顶功能,重新应用置顶设置 @@ -4630,7 +4584,7 @@ namespace Ink_Canvas /// /// 应用UIA置顶功能 /// - private void ApplyUIAccessTopMost() + public void ApplyUIAccessTopMost() { try { @@ -4651,8 +4605,8 @@ namespace Ink_Canvas App.watchdogProcess = null; } + App.StartWatchdogIfNeeded(); - // 调用UIAccess DLL if (Environment.Is64BitProcess) { PrepareUIAccessX64(); @@ -4662,7 +4616,6 @@ namespace Ink_Canvas PrepareUIAccessX86(); } - App.StartWatchdogIfNeeded(); timerKillProcess.Start(); } catch (Exception ex) diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs index 7c3207a4..8fba2a1a 100644 --- a/Ink Canvas/MainWindow_cs/MW_Settings.cs +++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs @@ -687,46 +687,6 @@ namespace Ink_Canvas SaveSettingsToFile(); } - /// - /// 处理开机启动开关状态更改事件 - /// - /// 事件发送者 - /// 路由事件参数 - /// - /// 当开机启动开关状态更改时: - /// 1. 如果开启,删除旧的启动项并创建新的启动项 - /// 2. 如果关闭,删除所有启动项 - /// - private void ToggleSwitchRunAtStartup_Toggled(object sender, RoutedEventArgs e) - { - if (!isLoaded) return; - if (ToggleSwitchRunAtStartup.IsOn) - { - StartAutomaticallyDel("InkCanvas"); - StartAutomaticallyCreate("Ink Canvas Annotation"); - } - else - { - StartAutomaticallyDel("InkCanvas"); - StartAutomaticallyDel("Ink Canvas Annotation"); - } - } - - /// - /// 处理启动时折叠开关状态更改事件 - /// - /// 事件发送者 - /// 路由事件参数 - /// - /// 当启动时折叠开关状态更改时,保存设置到文件 - /// - private void ToggleSwitchFoldAtStartup_Toggled(object sender, RoutedEventArgs e) - { - if (!isLoaded) return; - Settings.Startup.IsFoldAtStartup = ToggleSwitchFoldAtStartup.IsOn; - SaveSettingsToFile(); - } - /// /// 处理PowerPoint支持开关状态更改事件 /// @@ -3917,8 +3877,6 @@ namespace Ink_Canvas SaveSettingsToFile(); LoadSettings(isStartup: false, skipAutoUpdateCheck: true); isLoaded = true; - - ToggleSwitchRunAtStartup.IsOn = false; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); } @@ -4205,14 +4163,6 @@ namespace Ink_Canvas SaveSettingsToFile(); } - private void ToggleSwitchWindowMode_Toggled(object sender, RoutedEventArgs e) - { - if (!isLoaded) return; - Settings.Advanced.WindowMode = ToggleSwitchWindowMode.IsOn; - SaveSettingsToFile(); - SetWindowMode(); - } - private void ToggleSwitchIsAutoBackupBeforeUpdate_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs index 7ca4aea2..23fd71fc 100644 --- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs +++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs @@ -216,24 +216,6 @@ namespace Ink_Canvas { } - try - { - if (File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + - "\\Ink Canvas Annotation.lnk")) - { - ToggleSwitchRunAtStartup.IsOn = true; - } - else - { - ToggleSwitchRunAtStartup.IsOn = false; - } - } - catch (Exception ex) - { - LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); - ToggleSwitchRunAtStartup.IsOn = false; - } - if (Settings.Startup != null) { if (isStartup) @@ -243,11 +225,6 @@ namespace Ink_Canvas DelAutoSavedFiles.DeleteFilesOlder(Settings.Automation.AutoSavedStrokesLocation, Settings.Automation.AutoDelSavedFilesDaysThreshold); } - - if (Settings.Startup.IsFoldAtStartup && !App.StartWithBoardMode) - { - FoldFloatingBar_MouseUp(Fold_Icon, null); - } } if (Settings.Startup.IsEnableNibMode) @@ -331,8 +308,6 @@ namespace Ink_Canvas AutoUpdateWithSilenceStartTimeComboBox, AutoUpdateWithSilenceEndTimeComboBox); AutoUpdateWithSilenceStartTimeComboBox.SelectedItem = Settings.Startup.AutoUpdateWithSilenceStartTime; AutoUpdateWithSilenceEndTimeComboBox.SelectedItem = Settings.Startup.AutoUpdateWithSilenceEndTime; - - ToggleSwitchFoldAtStartup.IsOn = Settings.Startup.IsFoldAtStartup; } else { @@ -1003,7 +978,6 @@ namespace Ink_Canvas ToggleSwitchIsLogEnabled.IsOn = Settings.Advanced.IsLogEnabled; ToggleSwitchIsSaveLogByDate.IsOn = Settings.Advanced.IsSaveLogByDate; ToggleSwitchIsSecondConfimeWhenShutdownApp.IsOn = Settings.Advanced.IsSecondConfirmWhenShutdownApp; - ToggleSwitchWindowMode.IsOn = Settings.Advanced.WindowMode; ToggleSwitchIsSpecialScreen.IsOn = Settings.Advanced.IsSpecialScreen; ToggleSwitchIsEnableUriScheme.IsOn = Settings.Advanced.IsEnableUriScheme; ToggleSwitchIsQuadIR.IsOn = Settings.Advanced.IsQuadIR; diff --git a/Ink Canvas/Properties/Strings.en-US.resx b/Ink Canvas/Properties/Strings.en-US.resx index 36ee52db..2955f65e 100644 --- a/Ink Canvas/Properties/Strings.en-US.resx +++ b/Ink Canvas/Properties/Strings.en-US.resx @@ -258,6 +258,27 @@ # UIA topmost requires admin to take effect. + + Topmost Mode + + + Normal Topmost + + + UIA Topmost (Requires Admin) + + + Switching to UIA topmost mode requires a restart to take effect. Restart now? + + + Switching to normal topmost mode requires a restart to take effect. Restart now? + + + Restart as Administrator + + + Switch to Non-Admin Mode + Auto-update diff --git a/Ink Canvas/Properties/Strings.resx b/Ink Canvas/Properties/Strings.resx index 483d13e0..69d55a09 100644 --- a/Ink Canvas/Properties/Strings.resx +++ b/Ink Canvas/Properties/Strings.resx @@ -273,6 +273,27 @@ # 开启UIA置顶后,软件需要管理员启动才能置顶… + + 置顶模式 + + + 普通置顶 + + + UIA置顶(需要管理员权限) + + + 切换到UIA置顶模式需要重启软件才能生效,是否立即重启? + + + 切换到普通置顶模式需要重启软件才能生效,是否立即重启? + + + 重启到管理员模式 + + + 切换到非管理员模式 + 自动检查更新 diff --git a/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml index 10db149b..f5001078 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml +++ b/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml @@ -8,6 +8,7 @@ xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf" xmlns:i18n="clr-namespace:Ink_Canvas.MarkupExtensions" xmlns:sys="clr-namespace:System;assembly=mscorlib" + xmlns:controls="clr-namespace:Ink_Canvas.Controls;assembly=InkCanvas.Controls" mc:Ignorable="d" Title="启动"> @@ -15,9 +16,7 @@ - 4 -