Таймер с обратным либо прямым отсчётом времени, имитирующий электронное устройство с ЖК-дисплеем. Виджет можно разместить в любом месте экрана, он не мешает работе с другими приложениями.
Приложение для Windows 10 и 11, версия 0.1.
Скачайте TimerWidget-Setup.exe из последнего релиза и запустите. Установщик спросит язык, предложит поставить ярлык на рабочий стол и включить автозапуск вместе с Windows — от того и другого можно отказаться.
Права администратора не нужны: программа ставится в личную папку пользователя. Внутри лежит всё необходимое, отдельно устанавливать .NET не требуется. Установщик не подписан сертификатом, поэтому Windows может показать предупреждение SmartScreen — нажмите «Подробнее» и «Выполнить в любом случае».
При удалении программа убирает за собой всё: свою папку, ключ автозапуска и сохранённые настройки.
После запуска таймер появляется в правой верхней части экрана. Перетащите его мышью туда, где он не будет мешать.
Ниже табло четыре кнопки:
запускает отсчёт. Если таймер уже идёт — начинает заново. Если стоит на паузе — продолжает с того же места. Отдельной кнопки сброса нет: чтобы сбросить с паузы, нажмите
ещё раз, уже на идущем отсчёте.
останавливает время. Цифры на табло становятся тусклее, чтобы паузу было видно с первого взгляда. Повторное нажатие продолжает отсчёт.
открывает выбор режима и ввод времени.
Таймер умеет считать в двух направлениях, режим переключается в панели часов. Интервал задаётся там же, в полях часов и минут. Значения можно набрать с клавиатуры, покрутить колесо мыши над нужным полем или воспользоваться стрелками. Колесо меняет значение на единицу, а с зажатым Shift — сразу на пять. Шаг — минута, максимум — 23 часа 59 минут.
Если поменять интервал, пока таймер стоит, при обратном отсчёте цифры на табличке обновятся сразу. Если поменять его на ходу, текущий отсчёт не прервётся — новое значение вступит в силу при следующем запуске.
Обратный отсчёт идёт от заданного интервала к нулю.
Прямой отсчёт идёт с нуля вверх и срабатывает по тому же интервалу: табличка останавливается на заданном времени. Интервал 0:00 в этом режиме — обычный секундомер без сигнала, он просто замирает на 23:59:59.
Переключение режима интервал не затирает.
Табличка трижды мигает красным, а затем остаётся красной, пока вы не кликнете по виджету или не запустите таймер снова. Так сигнал не потеряется, даже если в этот момент вы отвернулись от экрана.
В тёмной теме краснеет фон, цифры остаются светлыми. В светлой наоборот — краснеют цифры.
Если в настройках включён звук, к этому добавятся три негромких сигнала. Звук выключается при сбросе сигнала или следующем запуске таймера, а если звуковое устройство недоступно, программа просто промолчит.
Так срабатывает и обратный отсчёт на нуле, и прямой — по достижении интервала. Если прямой отсчёт идёт без интервала (0:00) и добирается до предела табло 23:59:59, он просто останавливается: без мигания и без звука.
| Настройка | Варианты | По умолчанию |
|---|---|---|
| Язык | Русский или английский | Как в Windows |
| Тема | Тёмная или светлая | Тёмная |
| Размер | S, M, L, XL | M |
| Секунды | Показывать или нет | Не показывать |
| Звук | Включён или выключен | Выключен |
| Автозапуск | Включён или выключен | Выключен |
Язык интерфейса поначалу совпадает с языком Windows: русской системе соответствует русский, любой другой — английский. Как только вы выберете язык вручную, программа запомнит выбор и больше не будет смотреть на систему.
Размеры отличаются масштабом всей таблички: S — три четверти обычного, M — обычный, L и XL — примерно в треть и в две трети крупнее.
Секунды выводятся справа от минут более мелкими цифрами. Пока они выключены, табло показывает часы и минуты, и неполная минута с него не исчезает досрочно: при обратном отсчёте 01:00 держится, пока минута не истечёт целиком. Двоеточие между часами и минутами мигает раз в секунду, пока таймер идёт. На паузе двоеточие замирает, а цифры тускнеют.
В файле %AppData%\TimerWidget\settings.json. Там же запоминается положение на экране.
{
"theme": "dark",
"language": "",
"sizeId": "M",
"showSeconds": false,
"soundEnabled": false,
"autostart": false,
"mode": "countDown",
"durationSec": 1500,
"placement": {
"monitorDeviceName": "\\\\.\\DISPLAY1",
"nx": 0.82,
"ny": 0.12
}
}Положение хранится не в пикселях, а как имя монитора и доля от его рабочей области. Благодаря этому табличка возвращается на своё место после перезагрузки, а если вы поменяете масштаб интерфейса или разрешение, она не окажется за пределами экрана. Пропал монитор, на котором она стояла, — таймер появится на основном.
Ход самого отсчёта намеренно не сохраняется. После перезапуска программы таймер ждёт нажатия запуска, помня только режим и заданную длительность.
Автозапуск — это обычная запись в разделе реестра HKCU\Software\Microsoft\Windows\CurrentVersion\Run. Галка в настройках и галка в установщике управляют одной и той же записью, так что противоречий между ними не будет.
Таймер не отображается поверх игр, запущенных в исключительном полноэкранном режиме — это ограничение самой Windows. В оконном режиме без рамок, который сегодня используют почти все игры, всё работает.
Пока нет глобальных горячих клавиш, нескольких одновременных таймеров и режима, в котором щелчки проходят сквозь табличку. Программа работает только на 64-разрядных системах.
Понадобятся Windows и .NET 8 SDK.
dotnet build -c ReleaseСобранный файл окажется в bin\Release\net8.0-windows\TimerWidget.exe. Этот запуск тянет установленный .NET и для релиза не годится.
Установщик собирается только из самостоятельной публикации: рядом с exe уже лежит рантайм, на машине пользователя .NET не нужен. Дополнительно понадобится Inno Setup 6.
Get-Process TimerWidget -ErrorAction SilentlyContinue | Stop-Process -Force
dotnet publish -c Release -r win-x64 --self-contained true -o .\installer\publish
& "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe" .\installer\TimerWidget.issГотовый TimerWidget-Setup.exe появится в InstallerOutput. Сценарий установщика забирает файлы из installer\publish рядом с собой.
Приложение написано на WPF и .NET 8. Оно небольшое, поэтому обходится без слоя моделей представления: настройки лежат в AppSettings, время считает TimerEngine, а окно и две панели обращаются к ним напрямую.
app/
MainWindow.xaml табличка, кнопки, места для панелей
Views/
ClockPanel режим отсчёта и ввод времени
SettingsPanel внешний вид и системные настройки
Controls/
SevenSegmentDigit одна цифра из семи сегментов
SevenSegmentDisplay табло целиком
Services/
TimerEngine отсчёт времени
SettingsStore чтение и запись настроек
WindowPlacement положение на экране
AutostartService запись автозапуска в реестре
TrayService значок в области уведомлений
SoundService звуковой сигнал
Loc русские и английские строки
SingleInstance защита от второй копии
ThemeService переключение тем
Native/WindowChrome поведение окна: поверх всех, перетаскивание, фокус
Resources/ строки интерфейса
installer/ сценарий Inno Setup
Цифры нарисованы фигурами, а не шрифтом — иначе не получилось бы показать погашенные сегменты, из-за которых табло похоже на настоящее.
Время считается по Stopwatch, а таймер интерфейса лишь пять раз в секунду перерисовывает табло. Поэтому показания не убегают, даже если система на секунду задумается или уйдёт в сон.
MIT © 2026 Evgenii Petrashchuk.
