2009-10-24 32 views
9

我的意思是當用戶啓動我的應用程序(EXE)。我希望它直接在系統托盤中啓動,而不顯示窗口。與防病毒軟件&一樣,下載管理器可以在系統托盤中以靜默方式啓動和運行。如何直接在系統托盤中啓動應用程序? (.NET C#)

我想同樣的效果,當用戶點擊的NotifyIcon的的ContextMenuStrip的「顯示」按鈕後,唯一的應用程序應該顯示GUI。

我用這一點,但它不工作

private void Form_Load(object sender, EventArgs e) 
    { 
     this.Hide(); 
    } 

可能是我需要有main()函數中,沒有GUI,但有一些其他類的NotifyIcon &的ContextMenuStrip,其選項將實例化GUI窗口類。對?

+0

另請參閱此問題 - http://stackoverflow.com/questions/807005/c-net-winforms-instantiate-a-form-without-showing-it – ChrisF 2009-10-24 12:57:14

+0

對不起,以疏通一箇舊的話題。除了一件大事之外,我得到了一切。我明白'Application.Run()'本質上放棄了控制(?)。我想要做的是讓代碼做一些沒有用戶交互的事情(比如說它正在處理數據並將其寫入文件)。我將該代碼放在哪裏,以便在程序坐在系統托盤中時執行? – 2013-10-22 15:57:13

+0

@BarryDysert:'應用程序。運行()'啓動windows消息泵。如果你在某個地方沒有這個電話,那麼你的托盤圖標根本無法工作。如果不知道你實際想要達到什麼目的,我會說看看線程,只知道在調用除Application.Run()之外的線程上的UI東西時遇到的問題。 – 2013-12-12 22:38:52

回答

27

的方式,我通常設置這樣的事情是修改Program.cs看起來像下面這樣:

[STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     using (NotifyIcon icon = new NotifyIcon()) 
     { 
      icon.Icon = System.Drawing.Icon.ExtractAssociatedIcon(Application.ExecutablePath); 
      icon.ContextMenu = new ContextMenu(new MenuItem[] { 
       new MenuItem("Show form", (s, e) => {new Form1().Show();}), 
       new MenuItem("Exit", (s, e) => { Application.Exit(); }), 
      }); 
      icon.Visible = true; 

      Application.Run(); 
      icon.Visible = false; 
     } 
    } 

利用這一點,你不需要擔心隱藏的而不是封閉的形式和黑客可能導致的所有其餘...你可以做一個單的形式,而不是過多的實例化一個新的每個t都有Form ime您單擊顯示錶單選項。這是要建立起來的,而不是最終的解決方案。

+1

還有一點需要注意的是,儘管在任何GUI彈出之前出現此代碼,但仍需要使用GUI項目,否則會彈出一個控制檯窗口,這比原始問題還要糟糕! – 2009-10-24 12:15:28

+0

真棒!這正是我正在尋找的。但是,如何更改icon.Icon?我想把我自己的* .ico放在這裏。而不是提取一個。 – claws 2009-10-24 13:06:18

+1

'從內存中獲取新的System.Drawing.Icon(「C:\ Path \ To \ Icon.ico」),或使用資源(推薦)。有關如何創建/使用資源的詳細信息,請參閱此其他問題:http://stackoverflow.com/questions/90697/how-to-create-and-use-resources-in-c-net-vs-2008 – 2009-10-24 13:18:33

3

您需要設置通知圖標爲好。

手動或通過工具欄(拖動的NotifyIcon到您的形式)創建的NotifyIcon:

this.notifyIcon = new System.Windows.Forms.NotifyIcon(components); 

然後將此代碼添加到Form_Load()

// Notify icon set up 
notifyIcon.Visible = true; 
notifyIcon.Text = "Tooltip message here"; 
this.ShowInTaskbar = false; 
this.Hide(); 

雖然這個意願,一直指出,在隱藏它之前簡單地顯示錶單。

this question接受的答案,解決方案似乎是改變:

Application.Run(new Form1()); 

到:

Form1 f = new Form1(); 
Application.Run();   

Main()

+0

其實我已經設置了notifyIcon。所以,我只是加了 this.ShowInTaskbar = false; 但問題是該窗口顯示一瞬間,然後隱藏。我不想要這個。 – claws 2009-10-24 12:08:53

+0

看看我的解決方案,然後爪子。這將解決這個問題。 – 2009-10-24 12:10:28

+0

您是否嘗試將'WindowState'設置爲'Minimized'? – ChrisF 2009-10-24 12:14:59

0

你有沒有在C#創建一個Windows應用程序? 您需要將一個NotifyIcon控件拖放到窗體上,控件將放置在窗體下方,因爲窗體本身沒有可視化表示。

然後設置其屬性,如圖標...

試試這個第一...

相關問題