Индикатор доступности хоста в трее Windows 10/11: цветной кружок с маленькой подписью VPN под ним. Одним взглядом видно, поднят ли туннель до домашней сети, и значок не путается с другими «светофорчиками» в трее.
Форк Sajjad-s/TrayPingMonitor — вся логика пинга, трея и настроек взята оттуда, спасибо автору. Здесь изменён вид значка и версия .NET.
| Цвет | Значение |
|---|---|
| зелёный | хост отвечает |
| жёлтый | медленно (выше порога, по умолчанию 150 мс) или есть потери в последних пингах |
| красный | не отвечает |
| серый | старт или хост не задан |
Задержка и потери — во всплывающей подсказке при наведении.
- Значок: вместо цифр задержки внутри кружка — кружок поменьше и под ним подпись
VPN, нарисованная пиксельным шрифтом (методTrayIconFactory.CreateVpnIcon). Буквы того же цвета, что и статус, поэтому читаются и на тёмной, и на светлой панели задач. - .NET 10 вместо .NET 8 (
net10.0-windows). - Автовосстановление (с v1.1.0): пункт меню Auto-restore if closed — если приложение закрыли или оно упало, оно поднимется само в течение минуты (см. ниже).
- Один экземпляр на пользователя: повторный запуск ничего не делает, значки не дублируются.
- Переключатель VPN (с v1.2.0, необязательно): один пункт меню запускает заданную вами задачу Планировщика — отключить туннель, если хост отвечает, или подключить, если нет (см. ниже).
- Убраны закоммиченные в оригинале папки
bin/иobj/, добавлен.gitignore.
В изменённых файлах в первой строке стоит пометка об изменении (требование GPL-2.0).
- Скачать zip последней версии из Releases (например,
TrayPingMonitor-VPN-v1.2.1-win-x64.zip) и распаковать в постоянную папку, например%LOCALAPPDATA%\Programs\TrayPingMonitor. Контрольные суммы — вSHA256SUMS.txt. - Нужен .NET 10 Desktop Runtime (x64).
- Запустить
TrayPingMonitor.exe. При первом запуске откроется окно настроек: хост (IPv4, IPv6 или имя, например192.168.1.1— адрес роутера за VPN), интервал пинга и порог «медленно» в мс. - Правой кнопкой по значку → Run at startup — автозапуск (
HKCU\...\Run, права администратора не нужны). - Там же → Auto-restore if closed — автовосстановление.
Галочка Auto-restore if closed создаёт задачу Планировщика TrayPingMonitor keepalive от вашей учётной
записи (без прав администратора): она запускает TrayPingMonitor.exe при входе в систему (через 30 с) и
каждую минуту. Пока приложение работает, повторные запуски ничего не делают — второй экземпляр сразу выходит.
Если приложение закрыли или оно упало, значок вернётся в течение минуты.
- Пока галочка стоит, пункт Exit подписан «Exit (auto-restore brings it back within a minute)».
- Закрыть насовсем: снять галочку (задача удалится), затем Exit.
- Если exe перенесли в другую папку, при следующем запуске задача сама перенастроится на новый путь.
Из командной строки (для скриптов):
TrayPingMonitor.exe --keepalive on|off|status
Код возврата: 0 — включено / выполнено, 1 — выключено (для status), 2 — ошибка.
Если в settings.json заданы имена задач Планировщика VpnDisconnectTask и/или VpnConnectTask, в меню
появляется один пункт-переключатель. Его подпись выбирается при открытии меню по цвету значка:
- хост отвечает (зелёный или жёлтый) — Disconnect VPN, запускается задача
VpnDisconnectTask; - не отвечает (красный или серый) — Connect VPN, запускается задача
VpnConnectTask.
{"Host":"192.168.1.1","IntervalMs":1000,"LatencyThresholdMs":150,"RunAtStartup":true,"WindowSize":20,
"VpnDisconnectTask":"VPN Disconnect","VpnConnectTask":"VPN Connect"}Сам TrayPingMonitor прав администратора не получает — он только запускает задачи по имени. Что они делают, решаете
вы. Например, задача с «highest privileges» останавливает openconnect и ставит флаг, по которому ваш watchdog
перестаёт поднимать туннель; вторая снимает флаг и запускает watchdog. Скрипты таких задач держите в папке, куда
обычный пользователь не может писать, иначе правка скрипта = выполнение с правами администратора.
Крайние случаи:
- Дома без VPN хост отвечает напрямую, поэтому пункт покажет Disconnect VPN.
- При полном туннеле разрыв VPN рвёт и все удалённые сеансы, которые шли через него.
- Без этих двух параметров пункта в меню нет.
Если значка не видно — он спрятан за стрелкой у часов: Параметры → Персонализация → Панель задач → Другие значки области уведомлений.
Exe не подписан — SmartScreen при первом запуске может предупредить: Подробнее → Выполнить в любом случае. Не доверяете готовому exe — соберите сами (ниже).
Настройки хранятся в %AppData%\TrayPingMonitor\settings.json:
{"Host":"192.168.1.1","IntervalMs":1000,"LatencyThresholdMs":150,"RunAtStartup":true,"WindowSize":20}Нужен .NET 10 SDK (подойдёт и портативный zip SDK, без установки в систему).
dotnet publish -c Release -r win-x64 --self-contained false -p:PublishSingleFile=true
Exe окажется в bin\Release\net10.0-windows\win-x64\publish\. Чтобы exe работал без установленного .NET,
соберите с --self-contained true (файл станет заметно больше).
- Один хост на экземпляр. Проверка — ICMP-пинг: если хост отвечает на ping, но не пропускает трафик, значок будет зелёным; если ping фильтруется, значок будет красным при рабочем соединении.
- Только Windows (WinForms).
Если индикатор пригодился — можно кинуть на кофе, см. DONATE.md:
- Dogecoin:
D7z9UaBsmcV7EqJo5Y5fdLG9xUNw47dNgr
GPL-2.0, как у оригинала — см. LICENSE. Без каких-либо гарантий.
A Windows 10/11 tray ping indicator: a colored dot with a tiny VPN label under it (green — reachable, yellow — slow or packet loss, red — unreachable, gray — starting). Handy to see at a glance that your tunnel to the home network is up, and easy to tell apart from other tray dots.
Fork of Sajjad-s/TrayPingMonitor (all ping/tray/settings logic is
the original author's). Changes: pixel-font "VPN" label icon instead of latency digits, .NET 10, single instance
per user, optional Auto-restore if closed (a per-user scheduled task restarts the app within a minute; also
TrayPingMonitor.exe --keepalive on|off|status), optional VPN toggle menu item (runs the scheduled task named
in VpnDisconnectTask when the host answers, VpnConnectTask when it does not), removed committed
bin//obj/. Download the zip from Releases, install the .NET 10 Desktop Runtime, run TrayPingMonitor.exe,
set the host (e.g. your router 192.168.1.1). License: GPL-2.0.