2010-05-07 83 views
11

我有一個程序需要坐在後臺,當用戶連接到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_DISCONNECTWTS_SESSION_LOGOFF),並沒有一個句柄用於bool WTSRegisterSessionNotification(IntPtr hWnd, int dwFlags);我希望我的代碼更健壯,所以它如果用戶在關閉程序之前註銷或斷開會話,將進行清理。

任何關於如何可以吃我的蛋糕和吃它的建議?

回答

10

您可以創建一個用於處理消息的隱藏窗口。

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); 
    } 
    } 
} 
+0

試過了,它出現在Alt-Tab中。這是我的備份解決方案,但我真的很喜歡那種在alt-tab菜單中不顯示的解決方案。 – 2010-05-07 22:18:47

+0

如果您將此設置作爲Windows應用程序,它不應顯示在Alt-Tab中。 – 2010-05-07 22:33:27

+1

我添加了一行可以使這項工作(並保持窗口不在Alt-Tab列表中)。 – MusiGenesis 2010-05-07 23:01:37

7

看到這個問題: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列表中。

7

粘貼此,到你的代碼:

protected override CreateParams CreateParams 
     { 
      get 
      { 
       CreateParams pm = base.CreateParams; 
       pm.ExStyle |= 0x80; 
       return pm; 
      } 
     } 

這麼簡單。在win7 64bit上完美工作,更重要的是 - 它並不需要改變窗體邊框樣式(我創建了一個類似窗口小部件的應用程序,因此將樣式設置爲fixedToolWindow不是一種選擇,該解決方案仍然無邊界,標籤)。

+0

我做到了,現在窗體看起來好像我將FormBorderStyle設置爲FixedToolWindow – foxneSs 2015-08-08 13:24:09

相關問題