近日,多名Windows系统用户及开发者反馈,Windows终端(Windows Terminal)及传统控制台(Console)在窗口尺寸调整时出现了一个令人困惑的“不对称”问题:用户可以通过拖拽窗口边框或使用快捷键放大控制台窗口,操作流畅无阻;但一旦试图缩小窗口尺寸,系统却反应迟钝甚至完全拒绝执行,导致窗口只能“长大”不能“缩小”,严重影响使用体验。

问题复现:拉得开,收不回

据用户实测,该问题在Windows 10及Windows 11的多个版本中均有出现,且不限于特定终端应用。无论是系统自带的cmd.exe、PowerShell,还是微软近年力推的Windows Terminal,均表现出相同症状。当用户尝试将窗口高度或宽度调小时,鼠标拖拽到目标位置后,窗口边框会瞬间“回弹”至原始大小,或者干脆锁定不动;而拖大操作则毫无延迟地立即生效。

更令人费解的是,部分用户发现,若通过系统菜单中的“属性”或“默认值”对话框手动设置较小的窗口缓冲区大小,再重启终端,窗口仍能缩小至指定尺寸。这意味着问题并非硬件或底层图形驱动所致,而是控制台窗口尺寸响应逻辑存在Bug。

技术细节:历史遗留的布局算法冲突

资深技术人士分析指出,这一Bug很可能与Windows控制台窗口的“缓冲区-视口”双尺寸机制有关。Windows终端允许用户分别设置屏幕可见区域(视口)的尺寸以及后台可滚动的缓冲区尺寸。当用户拖拽窗口边缘时,系统会尝试自动调整视口大小,而缓冲区尺寸(行列数)通常保持不变。

问题在于,当用户缩小视口时,系统需要重新计算文本布局、行间距、滚动条位置以及可能的字体缩放。若缓冲区中已存在大量文本行,且当前字体尺寸与新的视口宽度不匹配,控制台窗口的窗口管理器(conhost.exe)可能因算法冲突而拒绝执行缩小操作,以免造成文本截断或布局错乱。而放大操作通常不会引发此类冲突——只需简单增加显示行数即可,因此能够顺利通过。

此外,有开发者反编译Windows终端源码后发现,在调整窗口尺寸的事件处理流程中,“缩小”分支存在一个未完善的边界条件检查:当新尺寸小于某个隐含的最小视口尺寸(该尺寸由字体大小、DPI缩放等动态决定)时,程序会直接返回false,导致缩放被拒绝。

用户影响:从日常办公到开发调试

这一Bug对普通用户而言,意味着无法灵活地调整窗口布局。例如,在分屏多任务时,用户习惯将控制台窗口拖拽到屏幕一侧并缩小,以便同时浏览其他应用;或是在调试程序时,需要不断调整窗口大小以查看完整的日志输出。现在,这些操作变得困难——一旦误将窗口拉得过大,就只能通过重启来“重置”尺寸。

对于重度依赖终端的开发者,影响更为严重。特别是在使用全屏编辑器(如vim)、运行持续滚动的日志命令(如tail -f)时,窗口缩小失败可能迫使文本自动换行错乱,甚至阻塞滚动条功能。部分用户甚至反馈,在远程桌面或虚拟桌面环境中,该Bug会导致窗口持续闪烁。

官方尚未正式回应

截至发稿,微软官方尚未就此事发布公告或确认修复时间线。Windows Terminal是微软开源并持续更新的项目,GitHub Issues页面已有相关反馈(如#17428号问题),但尚未被标记为“已确认”。有工程师在社区回复中表示,该问题与底层Windows控制台组件conhost.exe的历史设计有关,修复需谨慎评估,以避免影响大量既有程序对控制台窗口的兼容性。

临时变通方案

在官方补丁到来之前,用户可尝试以下临时方案:

  1. 通过属性面板调整:右键窗口标题栏 → 属性 → 布局,手动修改“窗口大小”的宽度和高度数值,点击确定后生效。
  2. 启用“使用旧版控制台”:部分用户发现,在控制台属性中关闭“使用旧版控制台”(若存在此选项),可恢复窗口缩放功能,但需注意旧版控制台可能缺失部分新特性(如真彩色支持)。
  3. 切换至Windows Terminal:Windows Terminal的用户可通过修改配置文件的initialSize参数强制设定初始尺寸,或使用快捷键Alt+Shift+方向键微调视口。
  4. 使用第三方终端:如Cmder、ConEmu等,它们基于不同的窗口管理逻辑,未受此Bug影响。

展望:微软需正视“体验一致性”

控制台窗口是Windows系统最古老的UI组件之一,承载着从系统管理员到AI工程师的日常操作。此次曝出的“缩放不对称”问题,暴露出微软在维护传统组件与现代终端体验之间的平衡不足。业界期待微软能尽快从根源上修复conhost.exe的尺寸调整逻辑,并同步在Windows Terminal中完善缩小操作的检测与反馈机制,让用户真正拥有“随心缩放”的自由。

(全文约980字)