c# – 如何使程序不会显示在Alt-Tab或任务栏中

我有一个程序需要坐在后台,当一个用户连接到一个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选项卡中没有任何内容.但是为了做到这一点,我放弃了访问像void WndProc(ref Message m)这样的功能所以现在我听不到Windows消息(像WTS_REMOTE_DISCONNECT或WTS_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);
    }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


c语言数组越界会怎么样
c语言指针怎么等于数组
c语言数组怎么存入文字
c语言中怎么显示数组
c语言数组元素怎么选
c语言数组怎么累加
c语言数组符号怎么输入
c语言怎么用长数组
c语言数组函数怎么输入
c语言数组怎么去掉差异
c语言怎么求解数组
c语言数组怎么用变量
c语言怎么申明数组
c语言怎么控制数组
c语言怎么计算数组长度
c语言数组怎么插星号
c语言数组怎么加长度
c语言中怎么输出数组
c语言怎么记住数组边界
c语言数组怎么输入符号