Бесполезная украшалка которая срабатывает на фразе "надеть: "
  • C# 99.7%
  • Batchfile 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-23 20:44:47 +03:00
dist V1 2026-09-23 20:44:47 +03:00
docs V1 2026-09-23 20:44:47 +03:00
src V1 2026-09-23 20:44:47 +03:00
.gitignore V1 2026-09-23 20:44:47 +03:00
app.ico V1 2026-09-23 20:44:47 +03:00
build.cmd V1 2026-09-23 20:44:47 +03:00
NadetPopus.csproj V1 2026-09-23 20:44:47 +03:00
README.md V1 2026-09-23 20:44:47 +03:00

Надеть Попус 2.2

Программа для трея Windows: наберите в любом окне надеть: клод-попус, и картинка hats\клод-попус.png появится над курсором как шапка (или заменит сам курсор) на заданное число минут.

Окно настроек

Запуск

dist\NadetPopus.exe

Нужен .NET 9 Desktop Runtime (обычно уже установлен вместе с .NET SDK). При первом запуске откроется окно настроек, а в папке dist\hats появятся 5 готовых картинок: клод-попус, цилиндр, корона, колпак и нимб. Повторный запуск exe не создаёт второй экземпляр: он просто открывает окно уже работающей программы.

Сборка из исходников: build.cmd (результат попадает в dist\).

Возможности

Что Как
Команда надеть: имя в любом окне. Регистр не важен, ё = е, пробел после двоеточия необязателен
Опечатки Backspace и Ctrl+Backspace учитываются. Esc, стрелки и горячие клавиши (Ctrl+V, Alt+Tab) сбрасывают набор
Раскладка Переключение языка посреди команды (Win+Space, Alt+Shift, Ctrl+Shift) ничего не ломает. Двоеточие подходит из любой раскладки: Shift+6 в русской, Shift+Ж в английской. Команда, набранная целиком не в той раскладке (yfltnm: rjhjyf), тоже распознаётся
Недописанное имя надеть: кор + пробел/Enter наденет «корона», если других картинок на «кор» нет
Мгновенно Как только имя набрано целиком, картинка надевается без Enter
Снять снять:, пункт в трее или кнопка «Снять» в окне. По таймеру снимается само
Режим 1: шапка Прозрачное окно над курсором, клики проходят насквозь. Когда курсор скрыт (набор текста, видео), шапка тоже прячется. Учитывается масштаб каждого монитора
Режим 2: курсор Системный курсор заменяется картинкой (можно заменить все виды: текст, рука, ожидание…)
Возврат курсора При снятии, по таймеру, при выходе, завершении сеанса и выключении ПК. Если процесс убили через диспетчер задач, обычный курсор возвращает маленький процесс-сторож (он запускается только пока курсор заменён). Если не сработало и это, курсор вернётся при следующем запуске программы

Действия cmd при надевании и снятии

Вкладка «Действия» задаёт общие команды для любой картинки. Внизу вкладки «Картинки» задаются команды для конкретной картинки. Сначала выполняется общая команда, потом команда картинки.

  • Когда: «При надевании» срабатывает сразу после появления картинки, так что скриншот уже будет с шапкой. «При снятии» срабатывает при снятии вручную, командой снять:, по таймеру, при смене картинки и при выходе из программы. При выключении ПК команды не запускаются.
  • Как: команда выполняется в фоне как строка .bat-файла, в UTF-8 (кириллица в путях и именах работает). Программа её не ждёт. Рабочая папка — папка с картинками. Кнопка ▶ рядом с полем запускает команду для проверки. Флажок «Показывать окно консоли» оставляет окно открытым до нажатия клавиши, чтобы увидеть ошибки.
  • Переменные: %NADET_NAME% — имя картинки, %NADET_FILE% — путь к файлу, %NADET_EVENT% — wear/remove, %NADET_MODE% — hat/cursor.
  • Примеры одним кликом: скриншот всего экрана в %TEMP%\nadet-shot.png, запись в журнал, запуск своего nadet-<имя>.bat, открытие сайта.

Пример — отдельный сценарий для «опуса»: в поле «При надевании» у картинки опус пишем call "C:\scripts\опус.bat". Внутри этого .bat можно сделать скриншот и передать его куда угодно.

Что настраивается в окне

  • Картинки: добавить (кнопкой или перетаскиванием PNG), переименовать (F2), удалить в корзину (Del), надеть двойным кликом.
  • Положение шапки: своё для каждой картинки. Тащите шапку мышью в живом превью, колесо меняет размер, стрелки двигают на 1 px (с Shift — на 10). Если картинка надета, изменения видны на экране сразу.
  • Режим курсора: размер и точка клика (красный прицел в превью).
  • Прочее: режим, время ношения (0 — бессрочно), текст команд, распознавание неправильной раскладки, мгновенное надевание, уведомления, звук (три встроенных синтезированных, два системных или свой WAV), автозагрузка вместе с Windows.

Всё сохраняется сразу, кнопок «ОК/Отмена» нет.

Трей

Левый клик открывает настройки. Правый клик открывает меню:

  • текущий статус с оставшимся временем;
  • подменю «Надеть» с миниатюрами картинок;
  • «Снять картинку с курсора»;
  • переключение режима;
  • пауза прослушивания клавиатуры (иконка становится серой);
  • «Выход».

Нагрузка

Замеры на этой машине:

Состояние CPU Память
Простой в трее 0 мс за 10 с ~6–13 МБ
Шапка надета, мышь двигается ~0,6% одного ядра —
Шапка надета, мышь стоит опрос замедляется до 16 раз/с —
  • Никаких фоновых потоков: хук клавиатуры срабатывает только на нажатия.
  • Позиция курсора опрашивается только пока шапка надета.
  • Папка с картинками пересканируется, только если изменилась.
  • После закрытия окна настроек и после надевания или снятия неиспользуемая память возвращается системе.
  • exe весит ~280 КБ.

Приватность

Нажатия никуда не пишутся и не отправляются. В памяти хранятся только ~100 последних символов, чтобы распознать команду. В окне самой программы команды не отслеживаются.

Проверка

dist\NadetPopus.exe --selftest result.txt

Самотест проверяет 20 сценариев разбора (раскладки, Backspace, двоеточие, недописанные имена и т.п.) и запуск cmd-действия с переменными и кириллицей. Код возврата 0 означает, что всё прошло.

Служебная команда, если курсор нужно вернуть вручную:

dist\NadetPopus.exe --restore-cursor

Структура

src/Program.cs          запуск, один экземпляр, служебные режимы
src/KeyboardListener.cs низкоуровневый хук клавиатуры → символы с учётом раскладки
src/CommandParser.cs    разбор «надеть: имя», раскладки, Backspace
src/HatLibrary.cs       папка с картинками, поиск по имени
src/HatManager.cs       надеть/снять, таймер
src/HatOverlay.cs       режим 1 — прозрачное окно-шапка
src/CursorReplacer.cs   режим 2 — замена курсора и гарантированный возврат
src/TrayApp.cs          трей и меню
src/SettingsForm.cs     окно настроек
src/PreviewBox.cs       интерактивное превью
src/Sounds.cs           звуки и автозагрузка
src/CmdActions.cs       cmd-команды при надевании/снятии
src/DefaultArt.cs       стартовые картинки и иконка (рисуются кодом)

Ограничение Windows: в окна, запущенные от администратора, хук обычной программы не видит нажатий. Чтобы команда работала и там, запустите программу тоже от администратора.