Как я могу создать приложение .NET Windows Forms, которое работает только в системном трее?

Что мне нужно сделать, чтобы приложение Windows Forms запускалось в системном трее?

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

10 Solutions collect form web for “Как я могу создать приложение .NET Windows Forms, которое работает только в системном трее?”

Основной ответ на использование NotifyIcon верен, но, как и многие другие, .NET, существует множество тонкостей, связанных с этим. Уроки, упомянутые Брэдом, дают хорошее представление о самых основах, но не затрагивают ни одного из них:

  • Закрывает ли приложение приложение из системного лотка надлежащим образом закрывает любые открытые дочерние формы?
  • Применяет ли приложение, что может работать только один экземпляр (применимо к большинству, хотя и не ко всем приложениям в лотке)?
  • Как при необходимости открыть дочерние windows WPF, а также дочерние windows WinForms.
  • Как поддерживать динамические контекстные меню.
  • Стандартный стандарт NotifyIcon существует в пространстве WinForms; могу ли я сделать чистое решение WPF? (Да, ты можешь!)

Я просто опубликовал статью на Simple-Talk.com, которая затрагивает эти моменты и многое другое, предоставляя фреймворк подноса, который вы можете использовать сразу, а также полное приложение для реального мира, чтобы показать все на практике. См. « Создание приложений в лотках в .NET: Практическое руководство» , опубликованное в ноябре 2010 года.

Статья проекта кода Создание приложения Tasktray дает очень простое объяснение и пример создания приложения, которое существует только в системном лотке.

В основном измените Application.Run(new Form1()); line в Program.cs чтобы вместо этого запустить class, который наследуется от ApplicationContext , и иметь конструктор для этого classа, инициализировать NotifyIcon

 static class Program { ///  /// The main entry point for the application. ///  [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MyCustomApplicationContext()); } } public class MyCustomApplicationContext : ApplicationContext { private NotifyIcon trayIcon; public MyCustomApplicationContext () { // Initialize Tray Icon trayIcon = new NotifyIcon() { Icon = Resources.AppIcon, ContextMenu = new ContextMenu(new MenuItem[] { new MenuItem("Exit", Exit) }), Visible = true }; } void Exit(object sender, EventArgs e) { // Hide tray icon, otherwise it will remain shown until user mouses over it trayIcon.Visible = false; Application.Exit(); } } 

Как говорит mat1t – вам нужно добавить NotifyIcon к вашему приложению, а затем использовать что-то вроде следующего кода для установки всплывающей подсказки и контекстного меню:

 this.notifyIcon.Text = "This is the tooltip"; this.notifyIcon.ContextMenu = new ContextMenu(); this.notifyIcon.ContextMenu.MenuItems.Add(new MenuItem("Option 1", new EventHandler(handler_method))); 

Этот код показывает только значок в системном трее:

 this.notifyIcon.Visible = true; // Shows the notify icon in the system tray 

При наличии формы (по какой-либо причине) потребуется следующее:

 this.ShowInTaskbar = false; // Removes the application from the taskbar Hide(); 

Щелчок правой кнопкой мыши, чтобы получить контекстное меню, обрабатывается автоматически, но если вы хотите сделать какое-то действие на левом щелчке, вам нужно будет добавить обработчик Click:

  private void notifyIcon_Click(object sender, EventArgs e) { var eventArgs = e as MouseEventArgs; switch (eventArgs.Button) { // Left click to reactivate case MouseButtons.Left: // Do your stuff break; } } 

Я написал приложение для подносов с .NET 1.1, и мне не нужна форма.
Прежде всего, установите объект запуска проекта как Sub Main , определенный в модуле.
Затем создайте программно компоненты: NotifyIcon и ContextMenu .
Не забудьте включить MenuItem «Quit» или подобное.
NotifyIcon ContextMenu с NotifyIcon .
Invoke Application.Run() .
В обработчике событий для Quit MenuItem обязательно вызовите set NotifyIcon.Visible = False , затем Application.Exit() . Добавьте то, что вам нужно, к ContextMenu и обработайте правильно 🙂

  1. Создайте новое приложение Windows с помощью мастера.
  2. Удалите Form1 из кода.
  3. Удалите код в Program.cs, запустив Form1 .
  4. Используйте class NotifyIcon для создания значка в системном трее (назначьте ему значок).
  5. Добавьте к нему контекстное меню.
  6. Или отреагируйте на NotifyIcon NotifyIcon и измените между щелчком правой и левой кнопки мыши, установив контекстное меню и показывая его, для которого была нажата кнопка (справа / слева).
  7. Application.Run() чтобы приложение работало с Application.Exit() чтобы выйти. Или некоторое while(bRunning){Application.DoEvents;Thread.Sleep(10);} . Затем установите bRunning = false для выхода из приложения.

Приложение «Системный лоток» – это просто обычное приложение для форм win, разница только в том, что он создает значок в области системного лотка Windows. Чтобы создать значок sys.tray, используйте компонент NotifyIcon, вы можете найти его в панели инструментов (общие элементы управления) и изменить его свойства: значок, подсказка. Также он позволяет обрабатывать сообщения с кликом мыши и двойным щелчком.

И еще одно, чтобы добиться внешнего вида и стандартного приложения для лотков. добавьте строки followinf на основное событие показа формы:

 private void MainForm_Shown(object sender, EventArgs e) { WindowState = FormWindowState.Minimized; Hide(); } 

Насколько мне известно, вы все равно должны писать приложение, используя форму, но не имеете никаких элементов управления в форме и никогда не устанавливаете ее на вид. Используйте NotifyIcon (образец MSDN, который можно найти здесь ), чтобы написать приложение.

Вот как я это сделал с Visual Studio 2010 , .NET 4

  1. Создайте приложение Windows Forms, установите «Сделать одно экземплярное приложение» в свойствах
  2. Добавить ContextMenuStrip
  3. Добавьте некоторые записи в полосу контекстного меню, дважды щелкните их, чтобы получить обработчики, например, «exit» (двойной щелчок) -> обработчик -> me.Close ()
  4. Добавьте NotifyIcon в конструкторе set contextMenuStrip к тому, который вы только что создали, выберите значок (вы можете найти его в папке VisualStudio под «common7 …»)
  5. Задайте свойства формы в конструкторе: FormBorderStyle: none, ShowIcon: false, ShowInTaskbar: false, Opacity: 0%, WindowState: Minimized
  6. Добавить Me.Visible = false в конце Form1_Load, это скроет значок при использовании Ctrl + Tab
  7. Запустите и отрегулируйте по мере необходимости.

Это очень дружественная структура для Application Area Application Application … достаточно добавить NotificationIcon в базовую форму и сменить автоматически сгенерированный код на код ниже:

 public partial class Form1 : Form { private bool hidden = false; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.ShowInTaskbar = false; //this.WindowState = FormWindowState.Minimized; this.Hide(); hidden = true; } private void notifyIcon1_Click(object sender, EventArgs e) { if (hidden) // this.WindowState == FormWindowState.Minimized) { // this.WindowState = FormWindowState.Normal; this.Show(); hidden = false; } else { // this.WindowState = FormWindowState.Minimized; this.Hide(); hidden = true; } } } 

Просто добавьте

 this.WindowState = FormWindowState.Minimized; this.ShowInTaskbar = false; 

к вашему объекту формы. В системном трее вы увидите только значок.

Давайте будем гением компьютера.