From 4f5e9aeb0223a73e315966fbd6457269595abf96 Mon Sep 17 00:00:00 2001 From: Nacho Date: Sun, 5 Apr 2026 20:03:27 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E5=90=AF?= =?UTF-8?q?=E7=94=A8=E9=BC=A0=E6=A0=87=E5=85=A8=E5=B1=80=E6=8B=96=E5=B0=BE?= =?UTF-8?q?=E7=89=B9=E6=95=88=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ConfigManager.cs | 3 +++ src/ControlPanelWindow.xaml | 1 + src/ControlPanelWindow.xaml.cs | 2 ++ src/MainWindow.xaml.cs | 8 ++++++++ src/Web/index.html | 13 +++++++++++-- 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/ConfigManager.cs b/src/ConfigManager.cs index 30663b9..c62c2ae 100644 --- a/src/ConfigManager.cs +++ b/src/ConfigManager.cs @@ -14,6 +14,7 @@ public static class ConfigManager public static bool EnableTelemetry { get; set; } = false; public static int TotalClicks { get; set; } = 0; public static string LastNoticeContent { get; set; } = ""; + public static bool EnableAlwaysTrailEffect { get; set; } = false; public static void Load() { @@ -31,6 +32,7 @@ public static void Load() EnableTelemetry = Convert.ToBoolean(key.GetValue("EnableTelemetry", false)); TotalClicks = Convert.ToInt32(key.GetValue("TotalClicks", 0)); LastNoticeContent = key.GetValue("LastNoticeContent", "")?.ToString() ?? ""; + EnableAlwaysTrailEffect = Convert.ToBoolean(key.GetValue("EnableAlwaysTrailEffect", false)); } } } @@ -72,6 +74,7 @@ public static void ResetAndClear() EnableTelemetry = false; TotalClicks = 0; LastNoticeContent = ""; + EnableAlwaysTrailEffect = false; } catch { } } diff --git a/src/ControlPanelWindow.xaml b/src/ControlPanelWindow.xaml index 1c6a751..0284b56 100644 --- a/src/ControlPanelWindow.xaml +++ b/src/ControlPanelWindow.xaml @@ -132,6 +132,7 @@ + diff --git a/src/ControlPanelWindow.xaml.cs b/src/ControlPanelWindow.xaml.cs index eda42b7..d052d7e 100644 --- a/src/ControlPanelWindow.xaml.cs +++ b/src/ControlPanelWindow.xaml.cs @@ -139,6 +139,7 @@ private void LoadSettings() CheckMasterSwitch.IsChecked = ConfigManager.IsEffectEnabled; CheckAutoStart.IsChecked = ConfigManager.AutoStart; CheckTelemetry.IsChecked = ConfigManager.EnableTelemetry; + CheckAlwaysTrailEffectSwitch.IsChecked = ConfigManager.EnableAlwaysTrailEffect; UpdateColorPreview(ConfigManager.ParticleColor); } @@ -206,6 +207,7 @@ private void SaveSettings_Click(object sender, RoutedEventArgs e) ConfigManager.Save("EnableTelemetry", CheckTelemetry.IsChecked ?? false); ConfigManager.Save("ParticleColor", ConfigManager.ParticleColor); ConfigManager.Save("TotalClicks", ConfigManager.TotalClicks); + ConfigManager.Save("EnableAlwaysTrailEffect", CheckAlwaysTrailEffectSwitch.IsChecked ?? false); App.SetAutoStart(ConfigManager.AutoStart); diff --git a/src/MainWindow.xaml.cs b/src/MainWindow.xaml.cs index 41cd133..e2a49b7 100644 --- a/src/MainWindow.xaml.cs +++ b/src/MainWindow.xaml.cs @@ -118,6 +118,14 @@ private void SetupGlobalHooks() _lastMoveTicks = currentTicks; System.Windows.Point clientPoint = this.PointFromScreen(new System.Windows.Point(e.X, e.Y)); + if (ConfigManager.EnableAlwaysTrailEffect) + { + webView.CoreWebView2.ExecuteScriptAsync($"window.enableAlwaysTrailEffect = true;"); + } + else + { + webView.CoreWebView2.ExecuteScriptAsync($"window.enableAlwaysTrailEffect = false;"); + } _ = webView.CoreWebView2.ExecuteScriptAsync($"if(window.externalMove) window.externalMove({clientPoint.X}, {clientPoint.Y});"); }; diff --git a/src/Web/index.html b/src/Web/index.html index c91b283..e94adef 100644 --- a/src/Web/index.html +++ b/src/Web/index.html @@ -57,8 +57,11 @@ }); window.addEventListener("mousemove", e => { - if (!this.isDown) return; + if (!this.isDown && !window.enableAlwaysTrailEffect) return; const p = getPos(e); + if (!this.lastPos) { + this.lastPos = p; + } if (this.lastPos && dist(p, this.lastPos) > 2) { this.trail.push({ x: p.x, y: p.y, life: 1 }); this.lastPos = p; @@ -118,7 +121,11 @@ for (let i = this.trail.length - 1; i >= 0; i--) { let t = this.trail[i]; - t.life -= this.isDown ? 0.085 : 0.18; + if (window.enableAlwaysTrailEffect) { + t.life -= 0.085; + } else { + t.life -= this.isDown ? 0.085 : 0.18; + } if (t.life <= 0) this.trail.splice(i, 1); } @@ -204,6 +211,8 @@ let lastBoomTime = 0; let lastMoveX = -1, lastMoveY = -1; +window.enableAlwaysTrailEffect = false; + window.externalBoom = (x, y) => { const now = Date.now(); if (x === lastBoomX && y === lastBoomY && (now - lastBoomTime) < 25) { From 627d6a7ddc99dcf7a570d2583fdf53c83edff80f Mon Sep 17 00:00:00 2001 From: Nacho Date: Sat, 13 Jun 2026 18:49:14 +0800 Subject: [PATCH 2/2] feat: add WeChat screenshot hotkey (Alt+A) to screenshot compatibility mode --- src/ControlPanelWindow.xaml | 2 +- src/OverlayManager.cs | 6 ++++++ src/Resources/Strings.en.resx | 2 +- src/Resources/Strings.ja.resx | 2 +- src/Resources/Strings.resx | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ControlPanelWindow.xaml b/src/ControlPanelWindow.xaml index 7c6d7f6..06c72d9 100644 --- a/src/ControlPanelWindow.xaml +++ b/src/ControlPanelWindow.xaml @@ -451,7 +451,7 @@ - + diff --git a/src/OverlayManager.cs b/src/OverlayManager.cs index 0e92050..5662819 100644 --- a/src/OverlayManager.cs +++ b/src/OverlayManager.cs @@ -354,6 +354,12 @@ private void OnScreenshotCompatKeyDown(object? sender, KeyEventArgs e) return; } + if (e.KeyCode == Keys.A && e.Alt && !e.Control) + { + BeginScreenshotCaptureSession(); + return; + } + if (e.KeyCode == Keys.Escape && _screenshotCaptureSessionActive) { ScheduleEndScreenshotCaptureSessionDebounced(); diff --git a/src/Resources/Strings.en.resx b/src/Resources/Strings.en.resx index 4d601b9..0b7d3c8 100644 --- a/src/Resources/Strings.en.resx +++ b/src/Resources/Strings.en.resx @@ -109,7 +109,7 @@ * Required for effects over elevated windows such as Task Manager. - * (Experimental) Hides overlay briefly during screenshots or QQ screenshot hotkeys. + * (Experimental) Hides overlay briefly during screenshots, QQ screenshot hotkeys (Ctrl+Alt+A), or WeChat screenshot hotkeys (Alt+A). Screenshot compatibility diff --git a/src/Resources/Strings.ja.resx b/src/Resources/Strings.ja.resx index e0d8473..20b087c 100644 --- a/src/Resources/Strings.ja.resx +++ b/src/Resources/Strings.ja.resx @@ -109,7 +109,7 @@ * タスクマネージャーなどの高権限ウィンドウでエフェクトを表示する場合に必要です。 - *(実験的)スクリーンショットや QQ の既定ショートカット検出時にオーバーレイを一時非表示にします。 + *(実験的)スクリーンショット、QQ の既定ショートカット (Ctrl+Alt+A)、または WeChat の既定ショートカット (Alt+A) 検出時にオーバーレイを一時非表示にします。 スクリーンショット互換 diff --git a/src/Resources/Strings.resx b/src/Resources/Strings.resx index 15999b0..fcafb17 100644 --- a/src/Resources/Strings.resx +++ b/src/Resources/Strings.resx @@ -109,7 +109,7 @@ * 若需在任务管理器等部分高权限窗口显示特效,请勾选此项。 - * (实验性功能) 开启后截图画面将不包含特效:检测到系统截图界面或 QQ 默认截图快捷键时会短暂隐藏叠加层以便框选窗口。 + * (实验性功能) 开启后截图画面将不包含特效:检测到系统截图界面、QQ 默认截图快捷键 (Ctrl+Alt+A) 或微信截图快捷键 (Alt+A) 时会短暂隐藏叠加层以便框选窗口。 截图兼容模式