【问题标题】:How to make a program not show up in Alt-Tab or on the taskbar如何使程序不显示在 Alt-Tab 或任务栏上
【发布时间】:2010-05-07 22:05:55
【问题描述】:

我有一个需要在后台运行的程序,当用户连接到 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);
}

我真的很喜欢这个,因为任务栏中没有项目,alt-tab 中也没有任何显示。但是为了做到这一点,我放弃了对void WndProc(ref Message m)之类的功能的访问所以现在我无法收听Windows消息(例如WTS_REMOTE_DISCONNECTWTS_SESSION_LOGOFF)并且没有用于bool WTSRegisterSessionNotification(IntPtr hWnd, int dwFlags);的句柄我想我的代码更健壮,因此如果用户在关闭程序之前注销或断开会话,它将进行大扫除。

关于如何吃蛋糕和吃蛋糕有什么建议吗?

【问题讨论】:

    标签: c# handle message-pump


    【解决方案1】:

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

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

    【讨论】:

    • 试过了,它显示在 Alt-Tab 中。这是我的备份解决方案,但我真的很想要一个不会出现在 alt-tab 菜单中的解决方案。
    • 如果您将此设置为 Windows 应用程序,则它不应显示在 Alt-Tab 中。
    • 我添加了一行来完成这项工作(并将窗口保留在 Alt-Tab 列表之外)。
    【解决方案2】:

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

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

    在 Windows Mobile 中,您将表单的 Text 属性设置为空白,以将其排除在正在运行的程序列表之外(WinMo 等效于 alt-tab 列表)。也许这对你有用,但我对此表示怀疑。

    更新:好的,这确实工作了。如果您创建并显示一个将其FormBorderStyle 设置为FixedToolWindow 并将其ShowInTaskbar 设置为false 的表单,它将不会出现在 Alt-Tab 列表中。

    【讨论】:

      【解决方案3】:

      将此粘贴​​到您的代码中:

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

      就这么简单。在 win7 64 位上完美运行,更重要的是 - 它不需要更改表单边框样式(我创建了一个类似小部件的应用程序,因此无法将样式设置为 fixedToolWindow,使用此解决方案它仍然是无边框且不可见的 alt-标签)。

      【讨论】:

      • 我做到了,现在表单看起来好像我将 FormBorderStyle 设置为 FixedToolWindow
      猜你喜欢
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      相关资源
      最近更新 更多