Как заставить программу не обнаружиться в Alt-Tab или на панели задач

У меня есть программа, которая должна находиться в фоновом режиме и когда пользователь соединится с сессией 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 о том, как я могу иметь свой пирог и съесть его также?

11
задан Scott Chamberlain 8 December 2012 в 23:07
поделиться

2 ответа

Вы можете создать скрытое окно, которое вы будете использовать для обработки сообщений.

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);
    }
  }
}  
11
ответ дан 3 December 2019 в 04:12
поделиться

См. Этот вопрос: Лучший способ скрыть окно с помощью переключателя программ Alt-Tab?

Я пробовал все решения, но независимо от того, что я делаю, окно все равно отображается в списке Alt-Tab (я использую Vista).

В Windows Mobile вы устанавливаете свойство Text формы на пустое, чтобы она не попадала в список запущенных программ (эквивалент WinMo списка alt-tab). Возможно, это сработает для вас, но я в этом сомневаюсь.

Обновление: Хорошо, этот действительно работает. Если вы создаете и показываете форму с его FormBorderStyle , установленным на FixedToolWindow , и его ShowInTaskbar , установленным на false , он будет не появятся в списке Alt-Tab.

7
ответ дан 3 December 2019 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: