如何直接在系统托盘中启动应用程序? (.NET C#)

时间:2009-10-24 11:52:24

标签: c# .net

我的意思是当用户启动我的应用程序(exe)时。我希望它直接在系统托盘中启动,而不显示窗口。像防病毒软件&下载管理器,静默启动并在系统托盘中运行。

我想要同样的效果,当用户点击notifyIcon的contextmenustrip的“show”按钮时,只有应用程序应该显示GUI。

我正在使用它,但它无效

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

可能我需要在其他没有GUI但具有notifyIcon& amp;的类中使用Main()函数。 ContextMenuStrip,其选项将实例化GUI窗口类。正确?

3 个答案:

答案 0 :(得分:30)

我通常设置这样的方法是将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;
        }
    }

使用此功能,您无需担心隐藏而不是关闭表单以及可能导致的所有其他黑客攻击...您也可以制作单例表单而不是实例化新的Form每次单击“显示表单”选项。这是建立起来的东西,而不是最终的解决方案。

答案 1 :(得分: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()中的

答案 2 :(得分:0)

您是否在C#中创建了Windows应用程序? 您需要将NotifyIcon控件拖到窗体上,控件将放在窗体下面,因为它在窗体上没有可视化表示。

然后设置其属性,例如Icon ...

先试试这个...