diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs index d82f1d64..fc0feb6a 100644 --- a/Ink Canvas/MainWindow.xaml.cs +++ b/Ink Canvas/MainWindow.xaml.cs @@ -1861,10 +1861,8 @@ namespace Ink_Canvas var hwnd = new WindowInteropHelper(this).Handle; if (Settings.Advanced.IsAlwaysOnTop) { - // 先设置WPF的Topmost属性 Topmost = true; - // 使用更强的Win32 API调用来确保置顶 // 1. 设置窗口样式为置顶 int exStyle = GetWindowLong(hwnd, GWL_EXSTYLE); SetWindowLong(hwnd, GWL_EXSTYLE, exStyle | WS_EX_TOPMOST); @@ -1873,8 +1871,8 @@ namespace Ink_Canvas SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_SHOWWINDOW | SWP_NOOWNERZORDER); - // 3. 如果启用了无焦点模式,需要特殊处理 - if (Settings.Advanced.IsNoFocusMode) + // 3. 如果启用了无焦点模式且未启用UIA置顶,需要特殊处理 + if (Settings.Advanced.IsNoFocusMode && !Settings.Advanced.EnableUIAccessTopMost) { // 启动置顶维护定时器 StartTopmostMaintenance(); @@ -1898,11 +1896,6 @@ namespace Ink_Canvas // 3. 停止置顶维护定时器 StopTopmostMaintenance(); - - // 注意:这里不直接设置Topmost,让其他代码根据模式决定 - - // 添加调试日志 - LogHelper.WriteLogToFile("应用窗口置顶: 取消置顶", LogHelper.LogType.Trace); } } catch (Exception ex) @@ -1916,6 +1909,11 @@ namespace Ink_Canvas /// private void StartTopmostMaintenance() { + if (Settings.Advanced.EnableUIAccessTopMost) + { + return; + } + if (isTopmostMaintenanceEnabled) return; if (topmostMaintenanceTimer == null) @@ -1950,6 +1948,12 @@ namespace Ink_Canvas { try { + if (Settings.Advanced.EnableUIAccessTopMost) + { + StopTopmostMaintenance(); + return; + } + if (!Settings.Advanced.IsAlwaysOnTop || !Settings.Advanced.IsNoFocusMode) { StopTopmostMaintenance();