在WinForms应用程序中隐藏任务栏

7

当我运行C# WinForms应用程序时,如何隐藏Windows任务栏?

我尝试了一些代码,但它在最大化视图中打开并显示任务栏。

你有任何示例代码或建议吗?


ShowInTaskbar = false; - Altivo
你到底为什么想要隐藏任务栏呢?如果你想让你的应用程序全屏,只需将其调整大小以填充屏幕,任务栏就会离开你的视线。请参阅 https://devblogs.microsoft.com/oldnewthing/20050505-04/?p=35703。 - Joe White
3个回答

21

只需将这个类添加到您的项目中即可。它会按照您的预期工作。

using System;
using System.Runtime.InteropServices;

public class Taskbar
{
    [DllImport("user32.dll")]
    private static extern int FindWindow(string className, string windowText);

    [DllImport("user32.dll")]
    private static extern int ShowWindow(int hwnd, int command);

    [DllImport("user32.dll")]
    public static extern int FindWindowEx(int parentHandle, int childAfter, string className, int windowTitle);

    [DllImport("user32.dll")]
    private static extern int GetDesktopWindow();

    private const int SW_HIDE = 0;
    private const int SW_SHOW = 1;

    protected static int Handle
    {
        get
        {
            return FindWindow("Shell_TrayWnd", "");
        }
    }

    protected static int HandleOfStartButton
    {
        get
        {
            int handleOfDesktop = GetDesktopWindow();
            int handleOfStartButton = FindWindowEx(handleOfDesktop, 0, "button", 0);
            return handleOfStartButton;
        }
    }

    private Taskbar()
    {
        // hide ctor
    }

    public static void Show()
    {
        ShowWindow(Handle, SW_SHOW);
        ShowWindow(HandleOfStartButton, SW_SHOW);
    }

    public static void Hide()
    {
        ShowWindow(Handle, SW_HIDE);
        ShowWindow(HandleOfStartButton, SW_HIDE);
    }
}

使用方法:

Taskbar.Hide();

3
有没有一种方法可以在第二个显示器上隐藏任务栏? - Randall Sandoval
是的,这也是可能的。它被命名为 Shell_SecondaryTrayWnd。我认为您应该能够相应地调整上面的代码。请记住,在旧系统上或者如果没有第二个屏幕存在时,它可能为 null - Christoph Meißner
这将移除任务栏,但任务栏占用的空间仍然存在。它只显示为背景颜色,但没有窗口可以扩展到其之上。有没有一种方法可以完全隐藏任务栏,使所有窗口最大化到屏幕的全部范围? - ChE Junkie
@ChEJunkie 我所做的只是将任务栏设置为自动隐藏。这样,当我使用它时,窗口可以使用整个屏幕空间。 - esac

4

您需要按照以下方式从属性设置WinForms应用程序

private void Form1_Load(object sender, EventArgs e)
    {
        this.TopMost = true;
        this.FormBorderStyle = FormBorderStyle.None;
        this.WindowState = FormWindowState.Maximized;
    }

这并不涵盖任务栏,但它几乎禁用了其大部分功能。 - yoel halb

3

您需要使用P/INVOKE

[DllImport("user32.dll")]
private static extern int FindWindow(string className, string windowText);
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int command);

private const int SW_HIDE = 0;
private const int SW_SHOW = 1;

int hwnd = FindWindow("Shell_TrayWnd","");
ShowWindow(hwnd,SW_HIDE);

我希望您能够理解。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接