Как сделать так, чтобы программа не отображалась в Alt-Tab или на панели задач
у меня есть программа, которая должна сидеть в фоновом режиме, и когда пользователь подключается к сеансу RDP, он выполнит некоторую настройку среды, а затем запустит программу. Когда программа будет закрыта, она выполнит некоторую уборку и выйдет из сеанса.
текущий способ, которым я это делаю, - у меня есть сервер терминалов, запускающий это приложение. Это построено как приложение windows forms, чтобы сохранить окно консоли от отображения:
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_DISCONNECT
или WTS_SESSION_LOGOFF
) и не имеют дескриптора для использования for bool WTSRegisterSessionNotification(IntPtr hWnd, int dwFlags);
Я хотел бы, чтобы мой код был более надежным, поэтому он будет делать уборку, если пользователь выходит из системы или отключается от сеанса, прежде чем он закроет программу.
любые рекомендации о том, как я могу иметь торт и съесть его?
3 ответов
вы можете создать скрытое окно, которое вы используете для обработки сообщений.
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 (я запускаю Vista).
В Windows Mobile для свойства Text формы задается значение blank, чтобы оно не попадало в список запущенных программ (эквивалент WinMo списка alt-tab). Возможно, это сработает для вас, но я сомневаюсь он.
обновление: ОК, этот тут работа в конце концов. Если вы создаете и показываете форму с ее FormBorderStyle
значение FixedToolWindow
и ShowInTaskbar
значение false
это не появится в списке Alt-Tab.
вставьте это в свой код:
protected override CreateParams CreateParams
{
get
{
CreateParams pm = base.CreateParams;
pm.ExStyle |= 0x80;
return pm;
}
}
просто. Отлично работает на win7 64bit и что более важно - он не требует, чтобы изменить стиль границы формы (я создал приложение, подобное виджету, поэтому настройка стиля для fixedToolWindow не была опцией, с этим решением его все еще без границ и невидимым для alt-tab).