This commit is contained in:
PrefacedCorg
2026-04-26 16:38:54 +08:00
parent adebf8ec38
commit 9132c9eb14
5 changed files with 336 additions and 231 deletions
+6 -1
View File
@@ -1,4 +1,4 @@
using System;
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
@@ -54,6 +54,11 @@ namespace Ink_Canvas.Helpers
[DllImport("user32.dll")]
private static extern IntPtr MonitorFromRect(ref RECT lprc, uint dwFlags);
public static IntPtr GetForegroundWindowHandle()
{
return GetForegroundWindow();
}
public static string WindowTitle()
{
IntPtr foregroundWindowHandle = GetForegroundWindow();
+174 -119
View File
@@ -709,10 +709,11 @@ namespace Ink_Canvas
var fullScreenWindows = _windowOverviewModel.GetFullScreenWindows();
if (fullScreenWindows == null || fullScreenWindows.Count == 0) return false;
var foregroundHandle = ForegroundWindowInfo.GetForegroundWindowHandle();
foreach (var window in fullScreenWindows)
{
var windowProcessName = window.ProcessName;
var windowRect = window.Rect;
if (windowProcessName == "EasiNote")
{
@@ -724,15 +725,18 @@ namespace Ink_Canvas
string version = versionInfo.FileVersion;
string prodName = versionInfo.ProductName;
if (version.StartsWith("5.") && Settings.Automation.IsAutoFoldInEasiNote)
if (version.StartsWith("5.") && Settings.Automation.IsAutoFoldInEasiNote &&
window.Handle == foregroundHandle)
{
return true;
}
else if (version.StartsWith("3.") && Settings.Automation.IsAutoFoldInEasiNote3)
else if (version.StartsWith("3.") && Settings.Automation.IsAutoFoldInEasiNote3 &&
window.Handle == foregroundHandle)
{
return true;
}
else if (prodName.Contains("3C") && Settings.Automation.IsAutoFoldInEasiNote3C)
else if (prodName.Contains("3C") && Settings.Automation.IsAutoFoldInEasiNote3C &&
window.Handle == foregroundHandle)
{
return true;
}
@@ -840,19 +844,15 @@ namespace Ink_Canvas
try
{
// 从窗口预览模型中获取窗口列表(已按ZOrder排序,最上层在前)
var windows = _windowOverviewModel.Windows;
if (windows == null || windows.Count == 0) return false;
// 获取前台窗口(ZOrder最小的窗口,即最上层)
var foregroundWindow = windows.FirstOrDefault();
var foregroundHandle = ForegroundWindowInfo.GetForegroundWindowHandle();
var foregroundWindow = windows.FirstOrDefault(w => w.Handle == foregroundHandle);
if (foregroundWindow == null) return false;
var windowProcessName = foregroundWindow.ProcessName;
var windowTitle = foregroundWindow.Title;
var windowRect = foregroundWindow.Rect;
// 检查EasiNote
if (windowProcessName == "EasiNote")
{
if (foregroundWindow.ProcessPath != "Unknown")
@@ -863,25 +863,18 @@ namespace Ink_Canvas
string version = versionInfo.FileVersion;
string prodName = versionInfo.ProductName;
if (version.StartsWith("5.") && Settings.Automation.IsAutoFoldInEasiNote)
if (version.StartsWith("5.") && Settings.Automation.IsAutoFoldInEasiNote &&
foregroundWindow.IsFullScreen)
{
bool isAnnotationWindow = windowTitle.Length == 0 && windowRect.Height < 500;
if (Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno && isAnnotationWindow)
{
return true;
}
else if (!isAnnotationWindow)
{
return true;
}
return true;
}
else if (version.StartsWith("3.") && Settings.Automation.IsAutoFoldInEasiNote3)
else if (version.StartsWith("3.") && Settings.Automation.IsAutoFoldInEasiNote3 &&
foregroundWindow.IsFullScreen)
{
return true;
}
else if (prodName.Contains("3C") && Settings.Automation.IsAutoFoldInEasiNote3C &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 &&
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
foregroundWindow.IsFullScreen)
{
return true;
}
@@ -889,100 +882,78 @@ namespace Ink_Canvas
catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); }
}
}
// 检查EasiCamera
else if (Settings.Automation.IsAutoFoldInEasiCamera && windowProcessName == "EasiCamera" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 &&
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查EasiNote5C
else if (Settings.Automation.IsAutoFoldInEasiNote5C && windowProcessName == "EasiNote5C" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 &&
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查SeewoPinco
else if (Settings.Automation.IsAutoFoldInSeewoPincoTeacher &&
(windowProcessName == "BoardService" || windowProcessName == "seewoPincoTeacher"))
(windowProcessName == "BoardService" || windowProcessName == "seewoPincoTeacher") &&
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查HiteCamera
else if (Settings.Automation.IsAutoFoldInHiteCamera && windowProcessName == "HiteCamera" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 &&
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查HiteTouchPro
else if (Settings.Automation.IsAutoFoldInHiteTouchPro && windowProcessName == "HiteTouchPro" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 &&
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查WxBoardMain
else if (Settings.Automation.IsAutoFoldInWxBoardMain && windowProcessName == "WxBoardMain" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 &&
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查MSWhiteboard
else if (Settings.Automation.IsAutoFoldInMSWhiteboard &&
(windowProcessName == "MicrosoftWhiteboard" || windowProcessName == "msedgewebview2"))
(windowProcessName == "MicrosoftWhiteboard" || windowProcessName == "msedgewebview2") &&
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查OldZyBoard
else if (Settings.Automation.IsAutoFoldInOldZyBoard &&
(WinTabWindowsChecker.IsWindowExisted("WhiteBoard - DrawingWindow") ||
WinTabWindowsChecker.IsWindowExisted("InstantAnnotationWindow")))
WinTabWindowsChecker.IsWindowExisted("InstantAnnotationWindow")) &&
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查HiteLightBoard
else if (Settings.Automation.IsAutoFoldInHiteLightBoard && windowProcessName == "HiteLightBoard" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 &&
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查AdmoxWhiteboard
else if (Settings.Automation.IsAutoFoldInAdmoxWhiteboard && windowProcessName == "Amdox.WhiteBoard" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 &&
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查AdmoxBooth
else if (Settings.Automation.IsAutoFoldInAdmoxBooth && windowProcessName == "Amdox.Booth" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 &&
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查QPoint
else if (Settings.Automation.IsAutoFoldInQPoint && windowProcessName == "QPoint" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 &&
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查YiYunVisualPresenter
else if (Settings.Automation.IsAutoFoldInYiYunVisualPresenter && windowProcessName == "YiYunVisualPresenter" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 &&
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
foregroundWindow.IsFullScreen)
{
return true;
}
// 检查MaxHubWhiteboard
else if (Settings.Automation.IsAutoFoldInMaxHubWhiteboard && windowProcessName == "WhiteBoard" &&
WinTabWindowsChecker.IsWindowExisted("白板书写") &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 &&
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
foregroundWindow.IsFullScreen)
{
if (foregroundWindow.ProcessPath != "Unknown")
{
@@ -1023,19 +994,23 @@ namespace Ink_Canvas
/// </remarks>
private void timerCheckAutoFold_Elapsed(object sender, ElapsedEventArgs e)
{
if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
if (isFloatingBarChangingHideMode) return;
try
{
bool hasFullScreen = HasFullScreenWindowOfAutoFoldApps();
bool shouldAutoFold = CheckShouldAutoFoldByWindowPreview();
var windowProcessName = ForegroundWindowInfo.ProcessName();
var windowTitle = ForegroundWindowInfo.WindowTitle();
Thickness currentMargin = new Thickness();
Dispatcher.Invoke(() =>
try
{
currentMargin = ViewboxFloatingBar.Margin;
});
if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
Dispatcher.Invoke(() => { currentMargin = ViewboxFloatingBar.Margin; });
}
catch (Exception)
{
return;
}
if (hasFullScreen)
{
@@ -1052,38 +1027,7 @@ namespace Ink_Canvas
if (shouldAutoFold)
{
if (windowProcessName == "EasiNote")
{
if (ForegroundWindowInfo.ProcessPath() != "Unknown")
{
var versionInfo = FileVersionInfo.GetVersionInfo(ForegroundWindowInfo.ProcessPath());
string version = versionInfo.FileVersion;
if (version.StartsWith("5.") && Settings.Automation.IsAutoFoldInEasiNote)
{
bool isAnnotationWindow = windowTitle.Length == 0 && ForegroundWindowInfo.WindowRect().Height < 500;
if (Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno && isAnnotationWindow)
{
if (!isFloatingBarFolded)
{
FoldFloatingBar_MouseUp(null, null);
}
}
else if (!isAnnotationWindow)
{
if (!unfoldFloatingBarByUser && !isFloatingBarFolded)
{
FoldFloatingBar_MouseUp(null, null);
}
else if (unfoldFloatingBarByUser)
{
}
}
}
}
}
// 处理其他目标软件
else if (!unfoldFloatingBarByUser && !isFloatingBarFolded)
if (!unfoldFloatingBarByUser && !isFloatingBarFolded)
{
FoldFloatingBar_MouseUp(null, null);
}
@@ -1099,11 +1043,13 @@ namespace Ink_Canvas
{
unfoldFloatingBarByUser = false;
}
else
{
UnFoldFloatingBar_MouseUp(new object(), null);
unfoldFloatingBarByUser = false;
}
else
{
// schedule unfold if dispatcher still running
if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
UnFoldFloatingBar_MouseUp(new object(), null);
unfoldFloatingBarByUser = false;
}
}
}
}
@@ -1221,8 +1167,11 @@ namespace Ink_Canvas
// 空闲状态的判定为不处于批注模式和画板模式
bool canSafelyUpdate = false;
Dispatcher.Invoke(() =>
try
{
if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
Dispatcher.Invoke(() =>
{
try
{
// 判断是否处于批注模式(inkCanvas.EditingMode == InkCanvasEditingMode.Ink
@@ -1244,12 +1193,18 @@ namespace Ink_Canvas
{
LogHelper.WriteLogToFile("AutoUpdate | Application is in ink or board mode, cannot update now");
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"AutoUpdate | Error checking application state: {ex.Message}", LogHelper.LogType.Error);
}
});
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"AutoUpdate | Error checking application state: {ex.Message}", LogHelper.LogType.Error);
}
});
}
catch (Exception)
{
// Dispatcher not available
return;
}
if (canSafelyUpdate)
{
@@ -1262,10 +1217,12 @@ namespace Ink_Canvas
AutoUpdateHelper.InstallNewVersionApp(AvailableLatestVersion, true);
// 关闭应用程序
Dispatcher.Invoke(() =>
try
{
Application.Current.Shutdown();
});
if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
Dispatcher.Invoke(() => { Application.Current.Shutdown(); });
}
catch (Exception) { }
}
else
{
@@ -1411,6 +1368,98 @@ namespace Ink_Canvas
}
}
/// <summary>
/// 在窗口关闭时停止并释放所有定时器与事件,防止在 Dispatcher 关闭期间还有后台线程调用 UI
/// </summary>
private void StopAllTimersAndHandlers()
{
try
{
// Stop and detach System.Timers.Timer
if (_unifiedMainWindowTimer != null)
{
_unifiedMainWindowTimer.Stop();
_unifiedMainWindowTimer.Elapsed -= OnUnifiedMainWindowTimerElapsed;
_unifiedMainWindowTimer.Dispose();
_unifiedMainWindowTimer = null;
}
if (timerKillProcess != null)
{
timerKillProcess.Stop();
timerKillProcess.Elapsed -= TimerKillProcess_Elapsed;
timerKillProcess.Dispose();
timerKillProcess = null;
}
if (timerCheckAutoUpdateWithSilence != null)
{
timerCheckAutoUpdateWithSilence.Stop();
timerCheckAutoUpdateWithSilence.Elapsed -= timerCheckAutoUpdateWithSilence_Elapsed;
timerCheckAutoUpdateWithSilence.Dispose();
timerCheckAutoUpdateWithSilence = null;
}
if (timerCheckAutoUpdateRetry != null)
{
timerCheckAutoUpdateRetry.Stop();
timerCheckAutoUpdateRetry.Elapsed -= timerCheckAutoUpdateRetry_Elapsed;
timerCheckAutoUpdateRetry.Dispose();
timerCheckAutoUpdateRetry = null;
}
if (timerDisplayTime != null)
{
timerDisplayTime.Stop();
timerDisplayTime.Elapsed -= TimerDisplayTime_Elapsed;
timerDisplayTime.Dispose();
timerDisplayTime = null;
}
if (timerDisplayDate != null)
{
timerDisplayDate.Stop();
timerDisplayDate.Elapsed -= TimerDisplayDate_Elapsed;
timerDisplayDate.Dispose();
timerDisplayDate = null;
}
if (timerNtpSync != null)
{
timerNtpSync.Stop();
timerNtpSync.Elapsed -= async (s, e) => await TimerNtpSync_ElapsedAsync();
timerNtpSync.Dispose();
timerNtpSync = null;
}
// DispatcherTimers run on UI thread
if (autoSaveStrokesTimer != null)
{
autoSaveStrokesTimer.Stop();
autoSaveStrokesTimer.Tick -= AutoSaveStrokesTimer_Tick;
autoSaveStrokesTimer = null;
}
if (_eraserAutoSwitchBackTimer != null)
{
_eraserAutoSwitchBackTimer.Stop();
_eraserAutoSwitchBackTimer.Tick -= EraserAutoSwitchBackTimer_Tick;
_eraserAutoSwitchBackTimer = null;
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"StopAllTimers failed: {ex.Message}", LogHelper.LogType.Error);
}
}
protected override void OnClosing(CancelEventArgs e)
{
// Stop timers and handlers to avoid background callbacks invoking Dispatcher after shutdown
StopAllTimersAndHandlers();
base.OnClosing(e);
}
/// <summary>
/// 启动橡皮擦自动切换回批注模式计时器
/// </summary>
@@ -1463,6 +1512,7 @@ namespace Ink_Canvas
/// </summary>
private void EraserAutoSwitchBackTimer_Tick(object sender, EventArgs e)
{
if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
try
{
// 检查是否仍然在橡皮擦模式
@@ -1481,12 +1531,17 @@ namespace Ink_Canvas
}
// 切换到批注模式
Dispatcher.Invoke(() =>
try
{
PenIcon_Click(null, null);
StopEraserAutoSwitchBackTimer();
LogHelper.WriteLogToFile("橡皮擦自动切换回批注模式", LogHelper.LogType.Event);
});
if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
Dispatcher.Invoke(() =>
{
PenIcon_Click(null, null);
StopEraserAutoSwitchBackTimer();
LogHelper.WriteLogToFile("橡皮擦自动切换回批注模式", LogHelper.LogType.Event);
});
}
catch (Exception) { }
}
catch (Exception ex)
{
@@ -16,6 +16,7 @@
<Grid Margin="59,0,59,0">
<FrameworkElement.Resources>
<sys:Double x:Key="SettingsCardSpacing">4</sys:Double>
<sys:Double x:Key="SettingsCardHeaderIconMaxSize">24</sys:Double>
<Style x:Key="SettingsSectionHeaderTextBlockStyle"
BasedOn="{StaticResource BodyStrongTextBlockStyle}"
TargetType="TextBlock">
@@ -25,185 +26,201 @@
</Style>
</FrameworkElement.Resources>
<Grid>
<ikw:SimpleStackPanel MaxWidth="1000"
<ikw:SimpleStackPanel MaxWidth="1600"
HorizontalAlignment="Stretch"
Spacing="{StaticResource SettingsCardSpacing}">
<TextBlock Text="{i18n:I18n Key=AutoFold_Title}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<TextBlock Text="{i18n:I18n Key=Automation_AutoFoldTitle}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote"
Header="希沃白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInEasiNote_Toggled"/>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="114514*" />
<ColumnDefinition Width="114514*" />
</Grid.ColumnDefinitions>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNoteIgnoreDesktopAnno"
Header="希沃白板 (忽略桌面批注)"
Icon="{x:Static ui:SegoeFluentIcons.Clear}"
Toggled="ToggleSwitchAutoFoldInEasiNoteIgnoreDesktopAnno_Toggled"/>
<ui:SettingsExpander Header="{i18n:I18n Key=AutoFold_App_SeewoBoard5}"
x:Name="ExpanderAutoFoldInEasiNote"
d:IsExpanded="True"
Grid.Column="0" VerticalAlignment="Top">
<ui:SettingsExpander.HeaderIcon>
<ui:ImageIcon Source="/Resources/Icons-png/EasiNote.png"/>
</ui:SettingsExpander.HeaderIcon>
<ui:ToggleSwitch x:Name="CardAutoFoldInEasiNote"
OnContent="{DynamicResource Common_On}"
OffContent="{DynamicResource Common_Off}"
Toggled="ToggleSwitchAutoFoldInEasiNote_Toggled"/>
</ui:SettingsExpander>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiCamera"
Header="希沃视频展台"
Icon="{x:Static ui:SegoeFluentIcons.Camera}"
Toggled="ToggleSwitchAutoFoldInEasiCamera_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiCamera"
Header="{i18n:I18n Key=AutoFold_App_SeewoCamera}"
IconSource="/Resources/Icons-png/EasiCamera.png"
Toggled="ToggleSwitchAutoFoldInEasiCamera_Toggled"
Grid.Column="1" VerticalAlignment="Top"/>
</Grid>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote3"
Header="EasiNote3"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoFold_App_SeewoBoard3}"
IconSource="/Resources/Icons-png/EasiNote3.png"
Toggled="ToggleSwitchAutoFoldInEasiNote3_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote3C"
Header="EasiNote3C"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoFold_App_SeewoLightBoard}"
IconSource="/Resources/Icons-png/EasiNote3C.png"
Toggled="ToggleSwitchAutoFoldInEasiNote3C_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote5C"
Header="EasiNote5C"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoFold_App_SeewoLightBoard5C}"
IconSource="/Resources/Icons-png/EasiNote5C.png"
Toggled="ToggleSwitchAutoFoldInEasiNote5C_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInSeewoPincoTeacher"
Header="Seewo Pinco Teacher"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoFold_App_SeewoPinco}"
IconSource="/Resources/Icons-png/SeewoPinco.png"
Toggled="ToggleSwitchAutoFoldInSeewoPincoTeacher_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteTouchPro"
Header="鸿合 TouchPro"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoFold_App_HiteBoard}"
IconSource="/Resources/Icons-png/HiteBoard.png"
Toggled="ToggleSwitchAutoFoldInHiteTouchPro_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteLightBoard"
Header="鸿合 光能板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInHiteLightBoard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteCamera"
Header="鸿合 视频展台"
Icon="{x:Static ui:SegoeFluentIcons.Camera}"
Header="{i18n:I18n Key=AutoFold_App_HiteCamera}"
IconSource="/Resources/Icons-png/HiteCamera.png"
Toggled="ToggleSwitchAutoFoldInHiteCamera_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteLightBoard"
Header="{i18n:I18n Key=AutoFold_App_HiteLightBoard}"
IconSource="/Resources/Icons-png/HiteLightBoard.png"
Toggled="ToggleSwitchAutoFoldInHiteLightBoard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInWxBoardMain"
Header="小白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoFold_App_WenXiangBoard}"
IconSource="/Resources/Icons-png/WenXiang.png"
Toggled="ToggleSwitchAutoFoldInWxBoardMain_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInOldZyBoard"
Header="中银白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInOldZyBoard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInMSWhiteboard"
Header="Microsoft Whiteboard"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoFold_App_MSWhiteboard}"
IconSource="/Resources/Icons-png/Whiteboard.png"
Toggled="ToggleSwitchAutoFoldInMSWhiteboard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInAdmoxWhiteboard"
Header="Admox 白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoFold_App_AdmoxBoard}"
IconSource="/Resources/Icons-png/AdmoxWhiteboard.png"
Toggled="ToggleSwitchAutoFoldInAdmoxWhiteboard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInAdmoxBooth"
Header="Admox 展台"
Icon="{x:Static ui:SegoeFluentIcons.Camera}"
Header="{i18n:I18n Key=AutoFold_App_AdmoxBooth}"
IconSource="/Resources/Icons-png/AdmoxBooth.png"
Toggled="ToggleSwitchAutoFoldInAdmoxBooth_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInQPoint"
Header="QPoint"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoFold_App_YiYunBoard}"
IconSource="/Resources/Icons-png/YiYunWhiteboard.png"
Toggled="ToggleSwitchAutoFoldInQPoint_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInYiYunVisualPresenter"
Header="易云展台"
Icon="{x:Static ui:SegoeFluentIcons.Camera}"
Header="{i18n:I18n Key=AutoFold_App_YiYunBooth}"
IconSource="/Resources/Icons-png/YiYunVisualPresenter.png"
Toggled="ToggleSwitchAutoFoldInYiYunVisualPresenter_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInMaxHubWhiteboard"
Header="MaxHub 白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoFold_App_MaxHubBoard}"
IconSource="/Resources/Icons-png/MaxHubWhiteboard.png"
Toggled="ToggleSwitchAutoFoldInMaxHubWhiteboard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInOldZyBoard"
Header="{i18n:I18n Key=AutoFold_OldZyBoard}"
IconSource="/Resources/Icons-png/Donview.png"
Toggled="ToggleSwitchAutoFoldInOldZyBoard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInPPTSlideShow"
Header="PPT 放映"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=Automation_AutoFoldInPPT}"
IconSource="/Resources/Icons-png/PPTTools.png"
Toggled="ToggleSwitchAutoFoldInPPTSlideShow_Toggled"/>
<TextBlock Text="{i18n:I18n Key=AutoKill_Title}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillPptService"
Header="PPT 服务"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoKill_PptTools}"
Description="{i18n:I18n Key=AutoKill_PptToolsHint}"
IconSource="/Resources/Icons-png/PPTTools.png"
Toggled="ToggleSwitchAutoKillPptService_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillEasiNote"
Header="希沃白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoKill_EasiNote5}"
IconSource="/Resources/Icons-png/EasiNote.png"
Toggled="ToggleSwitchAutoKillEasiNote_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillHiteAnnotation"
Header="鸿合批注"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoKill_HiteAnnotation}"
IconSource="/Resources/Icons-png/HiteAnnotation.png"
Toggled="ToggleSwitchAutoKillHiteAnnotation_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillVComYouJiao"
Header="VCom 幼教"
Header="{i18n:I18n Key=AutoKill_YouJiao}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillVComYouJiao_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillSeewoLauncher2DesktopAnnotation"
Header="希沃桌面批注"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Header="{i18n:I18n Key=AutoKill_SeewoDesktop2Anno}"
Description="{i18n:I18n Key=AutoKill_SeewoDesktop2AnnoHint}"
IconSource="/Resources/Icons-png/Seewo2Annotation.png"
Toggled="ToggleSwitchAutoKillSeewoLauncher2DesktopAnnotation_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillInkCanvas"
Header="InkCanvas"
Header="{i18n:I18n Key=AutoKill_InkCanvasIC}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillInkCanvas_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillICA"
Header="ICA"
Header="{i18n:I18n Key=AutoKill_ICA}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillICA_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillIDT"
Header="IDT"
Header="{i18n:I18n Key=AutoKill_Inkeys}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillIDT_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoEnterAnnotationAfterKillHite"
Header="杀进程后进入批注模式"
Icon="{x:Static ui:SegoeFluentIcons.Edit}"
Header="{i18n:I18n Key=AutoKill_HiteAfterKillEnterAnnotation}"
IconSource="/Resources/Icons-png/HiteAnnotation.png"
Toggled="ToggleSwitchAutoEnterAnnotationAfterKillHite_Toggled"/>
<TextBlock Text="{i18n:I18n Key=AutoFold_Mode}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardAutoEnterAnnotationModeWhenExitFoldMode"
Header="退出收纳时进入批注模式"
Header="{i18n:I18n Key=FoldMode_AutoFoldAfterWhiteboard}"
Icon="{x:Static ui:SegoeFluentIcons.Edit}"
Toggled="ToggleSwitchAutoEnterAnnotationModeWhenExitFoldMode_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldWhenExitWhiteboard"
Header="退出白板时自动收纳"
Header="{i18n:I18n Key=FoldMode_AutoFoldAfterWhiteboard}"
Icon="{x:Static ui:SegoeFluentIcons.Back}"
Toggled="ToggleSwitchAutoFoldWhenExitWhiteboard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldAfterPPTSlideShow"
Header="PPT 放映结束后自动收纳"
Icon="{x:Static ui:SegoeFluentIcons.Back}"
Header="{i18n:I18n Key=FoldMode_AutoFoldAfterPPT}"
Description="{i18n:I18n Key=FoldMode_AutoFoldAfterPPTHint}"
IconSource="/Resources/Icons-png/PPTTools.png"
Toggled="ToggleSwitchAutoFoldAfterPPTSlideShow_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardKeepFoldAfterSoftwareExit"
Header="软件退出后保持收纳"
Header="{i18n:I18n Key=Automation_KeepFoldAfterExit}"
Description="{i18n:I18n Key=Automation_KeepFoldAfterExitHint}"
Icon="{x:Static ui:SegoeFluentIcons.Pin}"
Toggled="ToggleSwitchKeepFoldAfterSoftwareExit_Toggled"/>
<TextBlock Text="{i18n:I18n Key=AutoSave_Title}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardSaveScreenshotsInDateFolders"
Header="截图按日期分文件夹"
Header="{i18n:I18n Key=Storage_AutoSaveInkOnScreenshot}"
Icon="{x:Static ui:SegoeFluentIcons.Folder}"
Toggled="ToggleSwitchSaveScreenshotsInDateFolders_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoSaveStrokesAtScreenshot"
Header="截图时自动保存墨迹"
Header="{i18n:I18n Key=Storage_AutoSaveInkOnScreenshot}"
Icon="{x:Static ui:SegoeFluentIcons.Save}"
Toggled="ToggleSwitchAutoSaveStrokesAtScreenshot_Toggled"/>
@@ -218,21 +235,22 @@
Toggled="ToggleSwitchSaveStrokesAsXML_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardEnableAutoSaveStrokes"
Header="定时自动保存墨迹"
Header="{i18n:I18n Key=Storage_AutoSaveInk}"
Description="{i18n:I18n Key=Storage_AutoSaveHint}"
Icon="{x:Static ui:SegoeFluentIcons.Save}"
Toggled="ToggleSwitchEnableAutoSaveStrokes_Toggled"/>
<ui:SettingsCard Header="自动保存间隔">
<ui:SettingsCard Header="{i18n:I18n Key=Storage_AutoSaveInterval}">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.QuietHours}"/>
</ui:SettingsCard.HeaderIcon>
<ComboBox x:Name="ComboBoxAutoSaveStrokesInterval"
SelectionChanged="ComboBoxAutoSaveStrokesInterval_SelectionChanged">
<ComboBoxItem Content="1 分钟" Tag="1"/>
<ComboBoxItem Content="3 分钟" Tag="3"/>
<ComboBoxItem Content="5 分钟" Tag="5"/>
<ComboBoxItem Content="10 分钟" Tag="10"/>
<ComboBoxItem Content="30 分钟" Tag="30"/>
<ComboBoxItem Content="{i18n:I18n Key=Storage_AutoSaveInterval_1Min}" Tag="1"/>
<ComboBoxItem Content="{i18n:I18n Key=Storage_AutoSaveInterval_3Min}" Tag="3"/>
<ComboBoxItem Content="{i18n:I18n Key=Storage_AutoSaveInterval_5Min}" Tag="5"/>
<ComboBoxItem Content="{i18n:I18n Key=Storage_AutoSaveInterval_10Min}" Tag="10"/>
<ComboBoxItem Content="{i18n:I18n Key=Storage_AutoSaveInterval_30Min}" Tag="30"/>
</ComboBox>
</ui:SettingsCard>
@@ -282,27 +300,27 @@
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Items>
<ui:SettingsCard Header="希沃白板 3">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/EasiNote3.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoWhiteboard3Floating" Toggled="ToggleSwitchSeewoWhiteboard3Floating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃白板 5">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/EasiNote.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoWhiteboard5Floating" Toggled="ToggleSwitchSeewoWhiteboard5Floating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃白板 5C">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/EasiNote5C.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoWhiteboard5CFloating" Toggled="ToggleSwitchSeewoWhiteboard5CFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃品课侧栏">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/SeewoPinco.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoPincoSideBarFloating" Toggled="ToggleSwitchSeewoPincoSideBarFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃品课画笔">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}"/></ui:SettingsCard.HeaderIcon>
<ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/SeewoPinco.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoPincoDrawingFloating" Toggled="ToggleSwitchSeewoPincoDrawingFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃PPT小工具">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/PPTTools.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoPPTFloating" Toggled="ToggleSwitchSeewoPPTFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="AiClass">
@@ -310,7 +328,7 @@
<controls:LabeledSettingsCard x:Name="CardAiClassFloating" Toggled="ToggleSwitchAiClassFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="鸿合屏幕书写">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}"/></ui:SettingsCard.HeaderIcon>
<ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/HiteAnnotation.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardHiteAnnotationFloating" Toggled="ToggleSwitchHiteAnnotationFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="畅言智慧课堂">
@@ -318,7 +336,7 @@
<controls:LabeledSettingsCard x:Name="CardChangYanFloating" Toggled="ToggleSwitchChangYanFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="畅言PPT">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/PPTTools.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardChangYanPptFloating" Toggled="ToggleSwitchChangYanPptFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="天喻教育云">
@@ -326,11 +344,11 @@
<controls:LabeledSettingsCard x:Name="CardIntelligentClassFloating" Toggled="ToggleSwitchIntelligentClassFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃桌面画笔">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}"/></ui:SettingsCard.HeaderIcon>
<ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/Seewo2Annotation.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoDesktopAnnotationFloating" Toggled="ToggleSwitchSeewoDesktopAnnotationFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃桌面侧栏">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/Seewo2Annotation.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoDesktopSideBarFloating" Toggled="ToggleSwitchSeewoDesktopSideBarFloating_Toggled"/>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
@@ -37,7 +37,7 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
var auto = SettingsManager.Settings.Automation;
CardAutoFoldInEasiNote.IsOn = auto.IsAutoFoldInEasiNote;
CardAutoFoldInEasiNoteIgnoreDesktopAnno.IsOn = auto.IsAutoFoldInEasiNoteIgnoreDesktopAnno;
ExpanderAutoFoldInEasiNote.IsExpanded = auto.IsAutoFoldInEasiNote;
CardAutoFoldInEasiCamera.IsOn = auto.IsAutoFoldInEasiCamera;
CardAutoFoldInEasiNote3.IsOn = auto.IsAutoFoldInEasiNote3;
CardAutoFoldInEasiNote3C.IsOn = auto.IsAutoFoldInEasiNote3C;
@@ -123,17 +123,11 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInEasiNote = CardAutoFoldInEasiNote.IsOn;
ExpanderAutoFoldInEasiNote.IsExpanded = CardAutoFoldInEasiNote.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInEasiNoteIgnoreDesktopAnno_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno = CardAutoFoldInEasiNoteIgnoreDesktopAnno.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchAutoFoldInEasiCamera_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;