[BUG] 最小化按钮点击无效 —— 无边框窗口缺少 WS_MINIMIZEBOX

Abierto
#190 1 comentario 0 reacciones 2 asignados Ver en GitHub

@Soulter ya está trabajando en esto.

Desde el 4/11/2026.

Evaluación

Este issue todavía no se ha evaluado.

Descripción

环境

  • AstrBot Desktop: 4.29.4
  • AstrBot Core: 4.29.4
  • OS: Windows 11 (x64)

复现步骤

  1. 正常启动客户端
  2. 点击标题栏右上角的最小化「—」按钮

实际现象

窗口无任何反应,不会最小化到任务栏。

预期行为

窗口最小化到任务栏,点击任务栏图标可恢复。

诊断信息

用 GetWindowLong(hwnd, GWL_STYLE) 读取该窗口样式:

GWL_STYLE   = 0x94000000   (WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS)
  WS_MINIMIZEBOX = 0 (false)
  WS_MAXIMIZEBOX = 0 (false)
  WS_SYSMENU     = 0 (false)

GWL_EXSTYLE = 0x080800A0
  WS_EX_TOPMOST  = 0 (false)

即该窗口是 decorations: false 的无边框窗口,右上角的「—」「□」「✕」三个按钮均为前端自绘。

关键点:通过系统 API 强制最小化是可以成功的:

ShowWindow(hwnd, SW_MINIMIZE);   // 调用后 IsIconic(hwnd) == True

说明窗口本身完全支持最小化,问题出在自绘按钮的点击处理没有真正调用到 Tauri 的窗口接口。

可能原因

  1. 自绘标题栏按钮的 click 事件未绑定 getCurrentWindow().minimize()
  2. 按钮的 disabled 状态计算有误(前端代码中该按钮绑定了 disabled: <bool>,aria-label 在 Minimize / Open 之间切换,某些场景下可能被判为禁用)
  3. 前端未拿到 Tauri window API(__TAURI__ 不可用时点击会静默失败,且没有日志)

建议修复

  • 在按钮 click 中显式调用 getCurrentWindow().minimize(),并对异常做 catch + 日志输出
  • 或在窗口配置中启用 minimizable: true 并保留原生样式位(WS_MINIMIZEBOX)
  • 顺带:WS_SYSMENU = false 导致 Alt + 空格 系统菜单也不可用,建议一并处理

补充说明

当前可用的绕过方案是直接调用 ShowWindow(hwnd, SW_MINIMIZE),可正常最小化;因此确认是按钮逻辑问题,而非窗口能力问题。

Lenguaje dominante
Rust
Estrellas
1k
Forks
48
Merge medio
1 d 9 h
PR fusionados (30 d)
2

Preparar el entorno

  • Sin Dockerfile ni archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de AstrBotDevs/AstrBot-desktop

Todos los issues de AstrBotDevs/AstrBot-desktop

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.