从任务栏隐藏应用程序 [英] Hiding an application from the taskbar

查看:50
本文介绍了从任务栏隐藏应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在努力从我的应用程序中隐藏任务栏中的另一个应用程序。
我一直在使用SetWindowLong函数来设置/删除extended style上的WS_EX_APPWINDOW

我尝试分别设置和删除该属性,并获取当前的WindowLong,然后将其删除/添加到该属性中,如下所示:

SetWindowLong(pMainWindow, GWL_EXSTYLE, GetWindowLong(pMainWindow) & WS_EX_APPWINDOW);

并尝试按如下方式删除它:

SetWindowLong(pMainWindow, GWL_EXSTYLE, GetWindowLong(pMainWindow) & ~WS_EX_APPWINDOW);

我也尝试了这两种方法,但没有先让窗口变长。以下是我的完整代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    [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);

    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 void HideWindowFromTaskbar(IntPtr pMainWindow)
    {
        SetWindowLong(pMainWindow, GWL_EXSTYLE, ~WS_EX_APPWINDOW);

        ShowWindow(pMainWindow, SW_HIDE);
        ShowWindow(pMainWindow, SW_SHOW);
    }

    private void ButtonHide_Click(object sender, RoutedEventArgs e)
    {
        HideWindowFromTaskbar(Process.GetProcessesByName("notepad")[0].MainWindowHandle);
    }
}

我注意到Spy++在查看属性时发生了变化。我有一堆不同的结果,比如WS_EX_APPWINDOW被添加了,但也随机地有其他属性消失了,等等。
在查看消息时,我还看到它确实收到了类似STYLE_CHANGED的消息。

推荐答案

确定哪些窗口在任务栏上有按钮的规则记录在MSDN中。陈瑞蒙给出了以下summary这些规则:

关于哪些窗口进入任务栏有一些基本规则。在……里面 简短:

  • 如果设置了WS_EX_APPWINDOW扩展样式,则它将显示(当可见时)。
  • 如果该窗口是顶级无主窗口,则它将(在可见时)显示。
  • 否则不会显示。
您试图修改另一个应用程序中的窗口这一事实严重阻碍了您的工作。您正在删除WS_EX_APPWINDOW扩展样式。这是不够的,因为所讨论的窗口将是顶级无主窗口(见项目符号2)。一旦窗口被创建,您就无法更改它的所有者,而且由于该窗口由另一个进程控制,您几乎被卡住了。

剩下的唯一选项是删除WS_EX_APPWINDOW扩展样式并将其替换为WS_EX_TOOLWINDOW。这确实会将窗口从任务栏上移走,但它会更改appearance of the window

该窗口旨在用作浮动工具栏。工具窗口 具有比普通标题栏短的标题栏,并且 窗口标题使用较小的字体绘制。工具窗口不会 出现在任务栏中或出现在用户 按ALT+TAB组合键。如果工具窗口有系统菜单,则其图标不会 显示在标题栏上。但是,您可以显示系统菜单 通过右击或键入ALT+空格。

这篇关于从任务栏隐藏应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆