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

如何隐藏任务栏并让程序利用其释放的空间

嘿,我来帮你搞定隐藏任务栏并让所有程序用上任务栏原本空间的需求!你用P/Invoke调用Windows API的思路完全正确,我把完整的实现代码和关键细节整理出来,补全你没写完的部分:

完整的Taskbar操作类
using System;
using System.Runtime.InteropServices;
using System.Drawing;

public class TaskbarManager
{
    // 窗口显示命令常量
    private const int SW_HIDE = 0;
    private const int SW_SHOW = 5;

    // SystemParametersInfo的操作常量
    private const int SPI_GETWORKAREA = 0x0030;
    private const int SPI_SETWORKAREA = 0x002F;
    private const int SPIF_SENDCHANGE = 0x0002;

    // 查找任务栏窗口(固定类名:Shell_TrayWnd)
    [DllImport("user32.dll")]
    private static extern IntPtr FindWindow(string className, string windowText);

    // 控制窗口显示/隐藏
    [DllImport("user32.dll")]
    private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);

    // 获取/设置系统工作区范围
    [DllImport("user32.dll")]
    private static extern bool SystemParametersInfo(int uiAction, int uiParam, ref Rectangle pvParam, int fWinIni);

    // 隐藏任务栏并将工作区扩展至整个屏幕
    public static void HideTaskbarAndExtendWorkspace()
    {
        // 1. 定位任务栏句柄并隐藏
        IntPtr taskbarHandle = FindWindow("Shell_TrayWnd", null);
        if (taskbarHandle != IntPtr.Zero)
        {
            ShowWindow(taskbarHandle, SW_HIDE);
        }

        // 2. 将工作区设置为整个屏幕尺寸
        Rectangle fullScreen = Screen.PrimaryScreen.Bounds;
        SystemParametersInfo(SPI_SETWORKAREA, 0, ref fullScreen, SPIF_SENDCHANGE);
    }

    // 恢复任务栏和默认工作区
    public static void ShowTaskbarAndRestoreWorkspace()
    {
        // 1. 重新显示任务栏
        IntPtr taskbarHandle = FindWindow("Shell_TrayWnd", null);
        if (taskbarHandle != IntPtr.Zero)
        {
            ShowWindow(taskbarHandle, SW_SHOW);
        }

        // 2. 恢复系统默认工作区(自动排除任务栏区域)
        Rectangle defaultWorkspace = new Rectangle();
        SystemParametersInfo(SPI_GETWORKAREA, 0, ref defaultWorkspace, 0);
        SystemParametersInfo(SPI_SETWORKAREA, 0, ref defaultWorkspace, SPIF_SENDCHANGE);
    }
}
关键细节解释
  • 隐藏任务栏:Windows任务栏的窗口类名是固定的Shell_TrayWnd,通过FindWindow定位到它的句柄后,用ShowWindow传入SW_HIDE即可隐藏。
  • 扩展工作区:默认情况下Windows会把任务栏区域排除在程序的工作区外,所以必须调用SystemParametersInfo设置SPI_SETWORKAREA,把工作区改成整个屏幕尺寸,这样程序最大化时才能覆盖原任务栏空间。
  • 恢复机制:如果需要还原原状,调用ShowTaskbarAndRestoreWorkspace即可,它会重新显示任务栏并将工作区恢复为系统默认设置。
使用示例(WinForms场景)
private void Form1_Load(object sender, EventArgs e)
{
    // 隐藏任务栏并扩展工作区
    TaskbarManager.HideTaskbarAndExtendWorkspace();
    // 让窗体最大化占满整个屏幕
    this.WindowState = FormWindowState.Maximized;
}

// 程序关闭时记得恢复任务栏
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    TaskbarManager.ShowTaskbarAndRestoreWorkspace();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:56:28