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

Đang mở
#190 1 bình luận 0 reaction 2 người được giao Xem trên GitHub

@Soulter đang làm issue này rồi.

Từ ngày 4/11/2026.

Đánh giá

Issue này chưa được đánh giá.

Mô tả

环境

  • 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),可正常最小化;因此确认是按钮逻辑问题,而非窗口能力问题。

Ngôn ngữ chính
Rust
Star
1k
Fork
48
Merge trung bình
1 ngày 9 giờ
Pull request đã merge (30 ngày)
2

Chuẩn bị môi trường

  • Không có Dockerfile hay tệp Docker Compose
  • Có mẫu pull request
  • Không có hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của AstrBotDevs/AstrBot-desktop

Tất cả issue của AstrBotDevs/AstrBot-desktop

Issue tương tự

Thêm issue về Rust

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.