如何使程序不出现在Alt-Tab或任务栏上
我有一个程序需要坐在后台,当用户连接到RDP会话时,它将执行一些环境设置,然后启动程序。当程序关闭时,它将进行一些管家和注销会话。如何使程序不出现在Alt-Tab或任务栏上
我现在这样做的方式是我有终端服务器启动这个应用程序。这是建立一个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);
}
}
}
看到这个问题:Best way to hide a window from the Alt-Tab program switcher?
我尝试了所有的解决方案,但无论我做什么窗口仍然在使用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;
}
}
这么简单。在win7 64bit上完美工作,更重要的是 - 它并不需要改变窗体边框样式(我创建了一个类似窗口小部件的应用程序,因此将样式设置为fixedToolWindow不是一种选择,该解决方案仍然无边界,标签)。
我做到了,现在窗体看起来好像我将FormBorderStyle设置为FixedToolWindow – foxneSs 2015-08-08 13:24:09
试过了,它出现在Alt-Tab中。这是我的备份解决方案,但我真的很喜欢那种在alt-tab菜单中不显示的解决方案。 – 2010-05-07 22:18:47
如果您将此设置作为Windows应用程序,它不应显示在Alt-Tab中。 – 2010-05-07 22:33:27
我添加了一行可以使这项工作(并保持窗口不在Alt-Tab列表中)。 – MusiGenesis 2010-05-07 23:01:37