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)
看到这个问题: 从Alt-Tab程序切换器隐藏窗口的最佳方法是什么?
我尝试了所有的解决方案,但无论我做什么,窗口仍然显示在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;
}
}
Run Code Online (Sandbox Code Playgroud)
就那么简单.在win7 64bit上完美运行,更重要的是 - 它不需要,改变表格边框样式(我创建了一个类似于widget的应用程序,因此设置样式到fixedToolWindow不是一个选项,这个解决方案仍然是无边框的,对于alt-是不可见的标签).
| 归档时间: |
|
| 查看次数: |
6703 次 |
| 最近记录: |