使用 C# 在 Windows 中隐藏/显示任务栏中的应用程序

本文关键字:显示 任务栏 应用程序 隐藏 Windows 使用 | 更新日期: 2023-09-27 18:37:08

我使用以下代码从任务栏中隐藏...

private const int SW_HIDE = 0x00;
private const int SW_SHOW = 0x05;
private const int WS_EX_APPWINDOW = 0x40000;
private const int GWL_EXSTYLE = -0x14;
private const int WS_EX_TOOLWINDOW = 0x0080;
[DllImport("User32.dll")]
public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
[DllImport("User32.dll")]
public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
bool isShow = true;
private void toggle(Process p)
{
    if (isShow)
    {
        isShow = false;
        SetWindowLong(p.MainWindowHandle, GWL_EXSTYLE, WS_EX_APPWINDOW);
        ShowWindow(p.MainWindowHandle, SW_SHOW);
        ShowWindow(p.MainWindowHandle, SW_HIDE);
        //Hide: working
    }
    else
    {
        isShow = true;
        SetWindowLong(p.MainWindowHandle, GWL_EXSTYLE, WS_EX_APPWINDOW);
        ShowWindow(p.MainWindowHandle, SW_HIDE);
        ShowWindow(p.MainWindowHandle, SW_SHOW);
        //Show: not working
    }
}

但是现在我希望任务栏再次显示我的程序 - 有人知道该怎么做吗?

使用 C# 在 Windows 中隐藏/显示任务栏中的应用程序

通过使用 WS_EX_APPWINDOW 参数调用 SetWindowLong,您不会设置或删除标志,而是将扩展样式完全替换为 WS_EX_APPWINDOW 。您可能不会注意到它,因为您没有使用任何其他扩展样式。

添加带有SetWindowLong样式标志的正确方法是:

SetWindowLong(p.MainWindowHandle, GWL_EXSTYLE, 
    GetWindowLong(p.MainWindowHandle, GWL_EXSTYLE) | WS_EX_APPWINDOW);

删除标志的正确方法是:

SetWindowLong(p.MainWindowHandle, GWL_EXSTYLE, 
    GetWindowLong(p.MainWindowHandle, GWL_EXSTYLE) & ~WS_EX_APPWINDOW);

阅读有关按位运算的信息,了解为什么这是正确的操作方法。

作为旁注,您从任务栏中隐藏窗口的方式非常糟糕。首先,WS_EX_APPWINDOW不仅从任务栏中隐藏按钮,而且还更改了窗口边框样式。此外,您在没有充分理由的情况下隐藏和重新显示窗口。

从任务栏中隐藏按钮的正确方法是使用 ITaskbarList::D eleteTab 方法。