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)