如何使程序不显示在Alt-Tab或任务栏上

Sco*_*ain 11 c# handle message-pump

我有一个需要坐在后台的程序,当用户连接到RDP会话时,它会进行一些环境设置,然后启动一个程序.当程序关闭时,它将执行一些内务处理并注销会话.

我目前的做法是让终端服务器启动这个应用程序.这是作为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);
}
Run Code Online (Sandbox Code Playgroud)

我真的很喜欢这个,因为任务栏中没有任何项目,并且alt-tab中没有任何内容显示.但是为了做到这一点,我放弃了对void WndProc(ref Message m) So等函数的访问权限.现在我无法收听Windows消息(喜欢WTS_REMOTE_DISCONNECT或者WTS_SESSION_LOGOFF)并且没有使用的句柄,因为bool WTSRegisterSessionNotification(IntPtr hWnd, int dwFlags);我希望我的代码更强大,所以它会做清理工作如果用户在关闭程序之前注销或断开会话.

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

Chr*_*lor 11

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

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);
    }
  }
}  
Run Code Online (Sandbox Code Playgroud)


Mus*_*sis 7

看到这个问题: 从Alt-Tab程序切换器隐藏窗口的最佳方法是什么?

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

在Windows Mobile中,将表单的Text属性设置为空白,使其不在正在运行的程序列表中(相当于alt-tab列表的WinMo).也许这对你有用,但我对此表示怀疑.

更新: 好的,毕竟这确实有效.如果您创建并显示其FormBorderStyle设置为的表单FixedToolWindow并将其ShowInTaskbar设置为false它将不会出现在Alt-Tab列表中.


Tom*_*ski 7

将此粘贴到您的代码中:

protected override CreateParams CreateParams
        {
            get
            {
                CreateParams pm = base.CreateParams;
                pm.ExStyle |= 0x80;
                return pm;
            }
        }
Run Code Online (Sandbox Code Playgroud)

就那么简单.在win7 64bit上完美运行,更重要的是 - 它不需要,改变表格边框样式(我创建了一个类似于widget的应用程序,因此设置样式到fixedToolWindow不是一个选项,这个解决方案仍然是无边框的,对于alt-是不可见的标签).