23

Создаем свой Pomodoro-таймер в системном трее на чистом PowerShell

Серия Философия PowerShell

Дисклеймер
В редакторе пикабу нет форматирования кода, поэтому блоки кода картинками. В конце статьи я дам ссылку на репозиторий.


Техника Pomodoro — это популярный метод управления временем, разработанный Франческо Чирилло в конце 1980-х. Его суть проста: вы разбиваете работу на 25-минутные интервалы (называемые «помидорами»), разделенные короткими 5-минутными перерывами. После каждых четырех циклов следует длинный перерыв. Это помогает сохранять концентрацию, избегать выгорания и лучше контролировать рабочий процесс.

В этой статье я покажу, как написать свой Pomodoro-таймер на чистом PowerShell, который будет работать в фоновом режиме, отображать обратный отсчет в заголовке окна и управляться через контекстное меню в системном трее — при этом весь скрипт занимает менее 100 строк кода.

Мы будем использовать .NET Framework (библиотеки WinForms), что позволит нам:

  1. Создать иконку в области уведомлений.

  2. Работать с контекстным меню.

  3. Использовать объект «Таймер» для выполнения кода в фоновом режиме.


Шаг 1: Подготовка библиотек и переменных

Для создания графического интерфейса нам понадобятся сборки System.Windows.Forms и System.Drawing. Также мы определим настройки времени и будем использовать область видимости $script:, чтобы обработчики событий (клики по меню) имели прямой доступ к переменным таймера.

Шаг 2: Создание иконки в трее (NotifyIcon)

Объект NotifyIcon отвечает за появление иконки в системном трее (рядом с часами). Для максимальной стабильности в Windows 10/11 мы будем использовать стандартную системную иконку «Information» (синий кружок с буквой «i»).

Шаг 3: Логика таймера и автоматизация фаз

Таймер работает как событие, которое срабатывает каждую секунду. Здесь реализован автоматический переход: когда заканчивается время работы, скрипт сам переключается на отдых и начинает новый отсчет.

Важный нюанс: В современных версиях PowerShell (7+) при форматировании времени необходимо принудительно приводить числа к типу [int], чтобы избежать ошибок обработки строк.

Шаг 4: Управление через контекстное меню

Чтобы кнопки меню гарантированно срабатывали в любой версии PowerShell, мы создаем их как отдельные объекты ToolStripMenuItem и подписываемся на событие Click.

Шаг 5: Запуск цикла обработки событий

Без этого метода скрипт завершится мгновенно после выполнения кода. Команда Run() заставляет приложение «ожидать» действий пользователя и сигналов таймера.

Разобрались? Вы великолепны!

Итоговый полный код можно найти в репозитории: pomodoro.ps1

Понравилось — ставь «+»
Полезно? Подпишись.

Так я буду знать, какой контент вам интересен.
Вопросы можно задавать в комментариях 👇👇👇

Вся серия «Философия PowerShell»
Удачи! 🚀

Лига Сисадминов

2.7K поста19.2K подписчик

Правила сообщества

Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества