- C# 99.7%
- Batchfile 0.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| dist | ||
| docs | ||
| src | ||
| .gitignore | ||
| app.ico | ||
| build.cmd | ||
| NadetPopus.csproj | ||
| README.md | ||
Надеть Попус 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: в окна, запущенные от администратора, хук обычной программы не видит нажатий. Чтобы команда работала и там, запустите программу тоже от администратора.
