如何使程序不出现在Alt-Tab或任务栏上

问题描述:

我有一个程序需要坐在后台,当用户连接到RDP会话时,它将执行一些环境设置,然后启动程序。当程序关闭时,它将进行一些管家和注销会话。如何使程序不出现在Alt-Tab或任务栏上

我现在这样做的方式是我有终端服务器启动这个应用程序。这是建立一个Windows窗体应用程序,以保持控制台窗口从显示出来:

public static void Main() 
{ 
    //(Snip...) Do some setup work 

    Process proc = new Process(); 
    //(Snip...) Setup the process 
    proc.Start(); 
    proc.WaitForExit(); 

    //(Snip...) Do some housecleaning 

    NativeMethods.ExitWindowsEx(0, 0); 
} 

我真的很喜欢这一点,因为有任务栏中没有项目,没有什么显示ALT标签了。但是为了做到这一点,我放弃了访问函数,如void WndProc(ref Message m)所以现在我不能听windows消息(如WTS_REMOTE_DISCONNECTWTS_SESSION_LOGOFF),并没有一个句柄用于bool WTSRegisterSessionNotification(IntPtr hWnd, int dwFlags);我希望我的代码更健壮,所以它如果用户在关闭程序之前注销或断开会话,将进行清理。

任何关于如何可以吃我的蛋糕和吃它的建议?

您可以创建一个用于处理消息的隐藏窗口。

using System; 
using System.Windows.Forms; 

namespace WindowsApplication1 
{ 
    class Program 
    { 
    [STAThread] 
    static void Main(string[] args) 
    { 
     Application.Run(new MessageWindow());   
    } 
    } 

    class MessageWindow : Form 
    { 
    public MessageWindow() 
    { 
     this.ShowInTaskbar = false; 
     this.WindowState = FormWindowState.Minimized; 
     // added by MusiGenesis 5/7/10: 
     this.FormBorderStyle = FormBorderStyle.FixedToolWindow; 
    } 

    protected override void WndProc(ref Message m) 
    { 
     base.WndProc(ref m); 
    } 
    } 
} 
+0

试过了,它出现在Alt-Tab中。这是我的备份解决方案,但我真的很喜欢那种在alt-tab菜单中不显示的解决方案。 – 2010-05-07 22:18:47

+0

如果您将此设置作为Windows应用程序,它不应显示在Alt-Tab中。 – 2010-05-07 22:33:27

+1

我添加了一行可以使这项工作(并保持窗口不在Alt-Tab列表中)。 – MusiGenesis 2010-05-07 23:01:37

看到这个问题:Best way to hide a window from the Alt-Tab program switcher?

我尝试了所有的解决方案,但无论我做什么窗口仍然在使用Alt-Tab列表(我运行Vista)显示出来。

在Windows Mobile中,您将表单的Text属性设置为空白,以使其不在运行程序列表(与alt-tab列表相同的WinMo)中。也许这会对你有用,但我怀疑它。

更新:好吧,这确实工作毕竟。如果您创建并显示一个表格,其FormBorderStyle设置为FixedToolWindow,并且其ShowInTaskbar设置为false,则而不是出现在Alt-Tab列表中。

粘贴此,到你的代码:

protected override CreateParams CreateParams 
     { 
      get 
      { 
       CreateParams pm = base.CreateParams; 
       pm.ExStyle |= 0x80; 
       return pm; 
      } 
     } 

这么简单。在win7 64bit上完美工作,更重要的是 - 它并不需要改变窗体边框样式(我创建了一个类似窗口小部件的应用程序,因此将样式设置为fixedToolWindow不是一种选择,该解决方案仍然无边界,标签)。

+0

我做到了,现在窗体看起来好像我将FormBorderStyle设置为FixedToolWindow – foxneSs 2015-08-08 13:24:09