У меня есть программа, которая должна находиться в фоновом режиме и когда пользователь соединится с сессией RDP, она сделает, некоторая установка среды затем запускает программу. Когда программа будет закрыта, она сделает некоторое обслуживание и выйдет из системы сессия.
Текущим путем я делаю, это, у меня есть терминальный сервер, запускают это приложение. Это создается как приложение форм окон, чтобы помешать консоли обнаруживаться:
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)
Таким образом, Теперь я не могу слушать сообщения окон (Как WTS_REMOTE_DISCONNECT
или WTS_SESSION_LOGOFF
) и не имейте дескриптора для использования для для bool WTSRegisterSessionNotification(IntPtr hWnd, int dwFlags);
Я хотел бы, чтобы мой код был более устойчивым, таким образом, он сделает уборку, если пользователь выйдет из системы или разъединится от сессии, прежде чем он закроет программу.
Какой-либо reccomendations о том, как я могу иметь свой пирог и съесть его также?
Вы можете создать скрытое окно, которое вы будете использовать для обработки сообщений.
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 формы на пустое, чтобы она не попадала в список запущенных программ (эквивалент WinMo списка alt-tab). Возможно, это сработает для вас, но я в этом сомневаюсь.
Обновление: Хорошо, этот действительно работает. Если вы создаете и показываете форму с его FormBorderStyle
, установленным на FixedToolWindow
, и его ShowInTaskbar
, установленным на false
, он будет не появятся в списке Alt-Tab.