Сворачиваем консольное приложение в область уведомлений(трей)

      Бывает, необходимость свернуть приложение в область уведомлений, особенно когда выполняется большой код. Рассмотрим пример реализации данной задачи. Создайте проект консольного приложения в Microsoft Visual Studio.
Для того чтобы свернуть консольное приложение воспользуемся WinAPI функциями «ShowWindow» и «GetConsoleWindow» из библиотеки «user32.dll». Добавим их подключение перед методом Main.
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

[System.Runtime.InteropServices.DllImport("kernel32.dll", ExactSpelling = true)]
private static extern IntPtr GetConsoleWindow();
Метод Main является точкой входа консольного приложения C# или приложения Windows. (Для библиотек и служб не требуется метод Main в качестве точки входа). При запуске приложения метод Main является первым вызываемым методом.
Для сворачивания консольного приложения в область уведомлений, воспользуемся WinAPI функцией ShowWindow с параметром 1.
ShowWindow(GetConsoleWindow(), 1);
     Что бы отобразить консольное приложение в области уведомлений воспользуемся пространством имен System.Windows.Forms, которое содержит классы для создания приложений Windows, позволяющие наиболее эффективно использовать расширенные возможности пользовательского интерфейса, доступные в операционной системе Microsoft Windows.
Подробнее с данным пространством имен, вы можете ознакомиться на сайте разработчиков Microsoft MSDN по адресу http://msdn.microsoft.com/ru-ru/library/system.windows.forms(v=vs.110).aspx
Добавьте данное пространство имен в ваш проект.
using System.Windows.Forms;
И ссылку на его библиотеку.
      Данное пространство имен содержит класс NotifyIcon. Класс указывает на компонент, который создает значок в области уведомлений.
Подробнее с данным классом, вы можете ознакомиться на сайте разработчиков Microsoft MSDN по адресу http://msdn.microsoft.com/ru-ru/library/system.windows.forms.notifyicon(v=vs.110).aspx.
Указываем создание нового компонента NotifyIcon, который создаст значок в области уведомлений.
NotifyIcon icon = new NotifyIcon();
      Далее необходимо задать текущий значок, инициализируя новый экземпляр класса System.Drawing.Icon из указанного имени файла иконки формата *.ico. Данный значок будет отображаться в значок в области уведомлений. Файл значка необходимо положить в туже директорию, что и исполняемый файл.
icon.Icon = new System.Drawing.Icon("CSHarp.ico");
Так же необходимо добавить ссылку на библиотеку System.Drawing.
Укажем, что значок должен отображаться в области уведомлений.
icon.Visible = true;
Зададим текст подсказки, который будет отображаться при наведении указателя мыши на значок в области уведомлений.
icon.Text = "Свернутое консольное приложение";
      Отобразим всплывающую подсказку с указанным заголовком, текстом и значком в области уведомлений, в течении заданного периода времени. Укажем, например, две секунды.
icon.ShowBalloonTip(2000, "Скрытое консольное приложение", "Скрытие выполнено успешно!", ToolTipIcon.Info);
Так как никакого долго выполняющегося кода у нас нет, то сообщение вы не увидите, для этого добавим четырех секундную задержку.
System.Threading.Thread.Sleep(4000);
      Для того чтобы развернуть консольное приложение, воспользуемся WinAPI функцией, что и при сворачивании, только с параметром 1, а также добавим код для скрытия значка из области уведомлений.
ShowWindow(GetConsoleWindow(), 1);
icon.Visible = false;
Полный листинг приложения приведен ниже:
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

[System.Runtime.InteropServices.DllImport("kernel32.dll", ExactSpelling = true)]
private static extern IntPtr GetConsoleWindow();

static void Main(string[] args)
{
    //сворачиваем в область уведомлений
    ShowWindow(GetConsoleWindow(), 0);

    //Указываем компонент, который создает значок в области уведомлений.
    //Этот класс не может наследоваться.
    NotifyIcon icon = new NotifyIcon();

    //Задаем текущий значок. 
    //Иконка расположена рядом с exe файлом
    icon.Icon = new System.Drawing.Icon("CSHarp.ico"); 

    //Задаем значение, указывающее, виден ли значок в области уведомлений
    //в панели задач.
    icon.Visible = true;

    //Задаем текст подсказки, отображаемый при наведении указателя
    //мыши на значок в области уведомлений.
    icon.Text = "Свернутое консольное приложение";

    //Отображаем всплывающую подсказку с указанным заголовком, текстом 
    //и значком в панели задач в течении заданного периода времени.
    icon.ShowBalloonTip(2000, "Скрытое консольное приложение", "Скрытие выполнено успешно!", ToolTipIcon.Info);

    System.Threading.Thread.Sleep(4000);

    ShowWindow(GetConsoleWindow(), 1);//показываем 
    icon.Visible = false;  //убираем иконку из области уведомлений 
    Console.ReadKey();
}
      Запустите ваш проект, нажав на клавишу «F5». Если вы все сделали правильно, то в области уведомлений вы увидите сообщение.

Ссылка на исходник: Rusfolder.net


Комментариев нет:

Отправить комментарий

Большая просьба, не писать в комментариях всякую ерунду не по теме!