From b6368fb0e469b28a2712d25f6e8f8bc9f578f0a5 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sat, 20 Dec 2025 19:16:39 +0800 Subject: [PATCH] =?UTF-8?q?add:=E6=9C=89=E6=9B=B4=E6=96=B0=E6=97=B6?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E7=BA=A7=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/App.xaml.cs | 11 ++++ .../Helpers/WindowsNotificationHelper.cs | 62 +++++++++++++++++++ Ink Canvas/InkCanvasForClass.csproj | 1 + Ink Canvas/MainWindow.xaml.cs | 3 + 4 files changed, 77 insertions(+) create mode 100644 Ink Canvas/Helpers/WindowsNotificationHelper.cs diff --git a/Ink Canvas/App.xaml.cs b/Ink Canvas/App.xaml.cs index 3b7332a9..77ad92f7 100644 --- a/Ink Canvas/App.xaml.cs +++ b/Ink Canvas/App.xaml.cs @@ -59,8 +59,19 @@ namespace Ink_Canvas private static SplashScreen _splashScreen; private static bool _isSplashScreenShown = false; + [DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + private static extern int SetCurrentProcessExplicitAppUserModelID(string appId); + public App() { + try + { + SetCurrentProcessExplicitAppUserModelID("InkCanvasForClass.CE"); + } + catch + { + } + // 配置TLS协议以支持Windows 7 ConfigureTlsForWindows7(); diff --git a/Ink Canvas/Helpers/WindowsNotificationHelper.cs b/Ink Canvas/Helpers/WindowsNotificationHelper.cs new file mode 100644 index 00000000..6aed3066 --- /dev/null +++ b/Ink Canvas/Helpers/WindowsNotificationHelper.cs @@ -0,0 +1,62 @@ +using Hardcodet.Wpf.TaskbarNotification; +using Microsoft.Toolkit.Uwp.Notifications; +using System; +using System.Windows; + +namespace Ink_Canvas.Helpers +{ + internal static class WindowsNotificationHelper + { + private const string APP_ID = "InkCanvasForClass.CE"; + + public static void ShowNewVersionToast(string version) + { + try + { + var os = Environment.OSVersion.Version; + + if (os.Major == 6 && os.Minor == 1) + { + ShowBalloonForWin7(version); + } + else + { + ShowToastForModernWindows(version); + } + } + catch + { + } + } + + private static void ShowBalloonForWin7(string version) + { + Application.Current?.Dispatcher.Invoke(() => + { + try + { + var taskbar = Application.Current.Resources["TaskbarTrayIcon"] as TaskbarIcon; + if (taskbar == null) return; + + taskbar.Visibility = Visibility.Visible; + + taskbar.ShowBalloonTip( + "InkCanvasForClass CE", + $"有新版本:{version}", + BalloonIcon.Info); + } + catch + { + } + }); + } + + private static void ShowToastForModernWindows(string version) + { + new ToastContentBuilder() + .AddText("InkCanvasForClass CE") + .AddText($"有新版本:{version}") + .Show(); + } + } +} diff --git a/Ink Canvas/InkCanvasForClass.csproj b/Ink Canvas/InkCanvasForClass.csproj index 921824a8..4d5ed9d1 100644 --- a/Ink Canvas/InkCanvasForClass.csproj +++ b/Ink Canvas/InkCanvasForClass.csproj @@ -153,6 +153,7 @@ + diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs index 28611448..edc286b2 100644 --- a/Ink Canvas/MainWindow.xaml.cs +++ b/Ink Canvas/MainWindow.xaml.cs @@ -1011,6 +1011,9 @@ namespace Ink_Canvas // 检测到新版本 LogHelper.WriteLogToFile($"AutoUpdate | New version available: {AvailableLatestVersion}"); + // 通过 Windows 系统通知提示有新版本 + WindowsNotificationHelper.ShowNewVersionToast(AvailableLatestVersion); + // 检查是否是用户选择跳过的版本 if (!string.IsNullOrEmpty(Settings.Startup.SkippedVersion) && Settings.Startup.SkippedVersion == AvailableLatestVersion)