2009-10-24 82 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控件拖放到窗体上,控件将放置在窗体下方,因为窗体本身没有可视化表示。

然后设置其属性,如图标...

试试这个第一...

相关问题