You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建全屏窗口使同显示器任务栏自动隐藏?

实现单显示器任务栏自动隐藏的全屏窗口方案

核心思路是完全依赖Windows系统原生的全屏窗口识别机制,不需要手动修改任务栏状态,就能实现类似Chrome F11的效果:仅隐藏当前显示器的任务栏,窗口失活时自动恢复。

  • 创建真正的全屏窗口
    不要手动调整窗口大小后再去修改任务栏状态,直接创建覆盖目标显示器的无框全屏窗口:

    1. 获取窗口所在显示器的完整区域:用MonitorFromWindow拿到对应显示器句柄,再通过GetMonitorInfoW获取MONITORINFO里的rcMonitor(包含任务栏在内的整个显示器矩形区域)。
    2. 修改窗口样式为WS_POPUP | WS_VISIBLE,去掉标题栏、边框,让系统识别为全屏窗口。
    3. 调用SetWindowPos将窗口置顶并铺满整个显示器,确保覆盖所有区域。
  • 核心代码片段
    切换到全屏的关键代码:

    // 获取当前窗口所属显示器
    HMONITOR hMonitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
    MONITORINFO mi = { sizeof(MONITORINFO) };
    GetMonitorInfoW(hMonitor, &mi);
    
    // 保存原有窗口状态(用于退出全屏时恢复)
    LONG originalStyle = GetWindowLongPtrW(hwnd, GWL_STYLE);
    RECT originalRect;
    GetWindowRect(hwnd, &originalRect);
    
    // 切换为全屏样式
    SetWindowLongPtrW(hwnd, GWL_STYLE, WS_POPUP | WS_VISIBLE);
    SetWindowPos(hwnd, HWND_TOPMOST, 
                  mi.rcMonitor.left, mi.rcMonitor.top,
                  mi.rcMonitor.right - mi.rcMonitor.left,
                  mi.rcMonitor.bottom - mi.rcMonitor.top,
                  SWP_FRAMECHANGED | SWP_NOOWNERZORDER);
    

    退出全屏恢复状态的代码:

    SetWindowLongPtrW(hwnd, GWL_STYLE, originalStyle);
    SetWindowPos(hwnd, HWND_NOTOPMOST,
                  originalRect.left, originalRect.top,
                  originalRect.right - originalRect.left,
                  originalRect.bottom - originalRect.top,
                  SWP_FRAMECHANGED | SWP_NOOWNERZORDER);
    
  • 为什么不用App Bar接口
    你之前使用ABM_SETSTATE或修改Shell托盘窗口的自动隐藏状态,本质是全局修改任务栏配置,所以会影响所有显示器。而系统原生的全屏窗口机制是基于单个显示器和窗口激活状态的:当全屏窗口激活时,系统自动隐藏该显示器的任务栏;窗口失活或退出全屏时,任务栏自动恢复,完全匹配Chrome的表现。

  • 额外注意事项

    • 不需要监听任务栏相关消息,系统会根据窗口激活状态自动处理任务栏的显示/隐藏。
    • 确保窗口没有保留任何边框或标题栏元素,否则系统可能不会将其识别为全屏窗口。

内容的提问来源于stack exchange,提问作者RDH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:05:13