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

オープン
#190 コメント 1 件 リアクション 0 件 担当者 2 名 GitHub で見る

@Soulter がすでに取り組んでいます。

2026年11月4日 から。

評価

この issue はまだ評価されていません。

説明

环境

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

主要言語
Rust
スター
1k
フォーク
48
平均マージ
1日 9時間
マージ済み PR(30日)
2

環境構築

  • Dockerfile・Docker Compose ファイルなし
  • プルリクエストのテンプレートあり
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

AstrBotDevs/AstrBot-desktop のほかの issue

AstrBotDevs/AstrBot-desktop の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。