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