В прошлый раз я рассказывал про КругоЗор — камеру-кружок поверх всех окон, которая выросла из «маленькой фичи на за вечер» в инструмент, которым я веду все совещания.
Сегодня вторая серия про одержимость одной функцией. На этот раз про клавишу, на которой у меня с ≈2003 года выработан рефлекс.
Программа, достойная благодарности
Я про NumLock Calculator 3.3 Владимира Потапова из Иркутска. Кто пользовался – кивает прямо сейчас. Кто не пользовался – представьте: жмёшь NumLock, появляется калькулятор, жмёшь ещё раз, и он спрятался в трей. Всё. Одна клавиша, которая 99% времени ничего не делает (вот честно, кто из вас осознанно включает/выключает режим цифрового блока?), вдруг становится самым быстрым инструментом на рабочем столе. Последнее её обновление было
Почти 25 (Двадцать пять!!!) лет верой и правдой. Быстрее, чем ткнуть мышкой иконку калькулятора. Результат в буфер и далее в документ. И так сотню раз в неделю. До момента обновления Win10 → 11, и до запрета *.exe на корпоративной технике.
Главная проблема в том, что палец всё равно сам тянется к NumLock, а там пустота, т.к. рефлекс на подкорке. Но время идёт: встроенный калькулятор Windows подтянул внешний вид, обзавёлся функциями, плюс хочется ещё и прозрачности, изменения размера, стиля под интерфейс 11-ой.
Я пробовал новые аналоги. Я пробовал AutoHotkey-скрипты. Часто думал, что отстал от жизни, что нормальные люди уже давно открывают калькулятор через мышь и не страдают. Но нет, палец всё равно шёл на NumLock. И каждый раз был маленький укол: всё, больше не работает.
Три ночи на прототип
Я не разработчик, а жертва своей идеи. Как и в истории с КругоЗором, в роли исполнителя нейросеть; в роли заказчика, тестировщика, и я с кофе в три ночи.
Задача звучала на пять минут: перехватить NumLock, показать/спрятать калькулятор Windows, вернуть NumLock обратно в предыдущее положение, чтобы не мешать тем, кто им пользуется. На деле — пару неполных ночей.
import keyboardkeyboard.on_press(lambda e: toggle() if e.name == 'num lock' else None)
Проблема первая: Windows уже переключила состояние NumLock до того, как мы получили событие. Надо эмулировать обратное нажатие:
if not (GetKeyState(VK_NUMLOCK) & 1): keybd_event(VK_NUMLOCK, 0, 0, 0) keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0)
Проблема вторая: калькулятор в Windows 11 — это приложение. Он живёт внутри хостового окна ApplicationFrameWindow, и если его свернуть обычным ShowWindow(SW_MINIMIZE), следующее нажатие NumLock не разворачивает его, а создаёт второй экземпляр. Пришлось нейросети разбираться с cloaked-окнами через DwmGetWindowAttribute(DWMWA_CLOAKED).
Проблема третья: прозрачность. Нативного калькулятора Windows API не предоставляет, но можно навесить WS_EX_LAYERED на чужое окно и крутить альфу через SetLayeredWindowAttributes. Получилось через пять попыток.
Через три ночи я получил ровно то, что хотел: палец на NumLock → калькулятор появляется, ещё раз → прячется. Прозрачность — ползунком в трее. Выложил себе в одну папку, забыл.
Как и с КругоЗором, я думал — на этом всё.
Как и с КругоЗором, я ошибался.
Когда недоделки не дают спать
Одержимость — это не когда ты запускаешь новый стартап. Одержимость — это когда одна нереализованная функция не даёт спать, и пока не доделаешь, тебя будет трясти.
На следующий день я вбивал в калькулятор цифры, получал результат, копировал, вставлял в смету и дописывал руками «₽/м²». И думал: а почему эти единицы измерения я каждый раз вбиваю руками? У меня же иконка в трее, в ней меню, в меню всё что угодно.
Появилось подменю «Единицы измерения». Один клик – и в буфер добавляется «млн. ₽/м²» к уже скопированному числу. Категории: валюта, площадь, масса, стройматериалы. Список читается из простого текстового файла units_menu.txt, чтобы каждый настроил под свой рабочий контекст.
Ещё через неделю: заметки прямо в меню трея. Строка ввода, Enter, и в заранее указанный .md-файл для уважаемого Obsidian. Дописывается строка с датой-временем. Без открытия Obsidian, без Alt-Tab в Notion, без потери фокуса. Пришла мысль — зафиксировал за две секунды. Форматы: md / txt / rtf.
Что в итоге:

CalcNumLock v7.3. ≈3000 строк Python + PyQt5, 50 МБ onefile-exe.
-
NumLock открывает/прячет Windows Calculator. Или любой выбранный exe.
-
Прозрачность — ползунком в трее, запоминается.
-
Единицы измерения — меню в трее, клик → в буфер (с опцией автовставки в курсор).
-
Заметки — поле ввода прямо в меню трея, Enter пишет в md/txt/rtf.
-
Учёт времени — CSV по дням, категории процессов, пауза, HTML-отчёт с графиками, экспорт за период.
-
Скриншоты — по смене окна или по таймеру, с автоматическим замедлением при ВКС, исключениями по exe, лимитом по диску и дням.
-
Всё в одном дарк-меню и одном диалоге настроек — шесть вкладок, раздел «Пути» показывает все файлы программы.
Собирается в один .exe — Python на целевой машине не нужен.
Бесплатно | Без рекламы | Работает без интернета
Что это значит (по честному)
Как и КругоЗор – это не бизнес. Это мой инструмент. Если у вас такой же рефлекс на NumLock и такая же ностальгия по калькулятору Потапова – забирайте, пользуйтесь, правьте units_menu.txt под себя.
Я знаю, что это тоже не взлетит. Анар Бабайкин был прав в прошлой статье: сервис одной фичи не решает глобальной проблемы. Но есть чувство, которое ни один бизнес-консультант не отменит: когда ты 20 лет давишь на одну клавишу, потом эта клавиша перестаёт работать, а потом ты берёшь и заставляешь её снова работать своими руками, даже если под капотом там уже совсем другая программа, и при этом скрипт позволяет поставить любой exe, даже тот же NumLock Calculator 3.3 от Потапова
Просто починить мир в той точке, где лично тебе неудобно. Если тоже тянете палец к NumLock и испытываете фантомную боль, держите ссылку:
👉 CalcNumLock — канал программы, дистрибутив и обратная связь
👉 Исходник открытый — GitHub репозиторий
ссылка на оригинал статьи https://habr.com/ru/articles/1027720/