Гид по технологиям

Создание ультра‑лёгкого приложения заметок на AutoHotkey

9 min read Автоматизация Обновлено 09 Jan 2026
MUONotes: заметки на AutoHotkey быстро и просто
MUONotes: заметки на AutoHotkey быстро и просто

Важно: все примеры в статье рассчитаны на стабильную текущую версию AutoHotkey (v1). Перед запуском убедитесь, что вы установили актуальную версию с официального сайта.

О чём эта статья

Этот материал проведёт вас шаг за шагом от установки AutoHotkey до работающего мини‑приложения заметок (MUONotes). Мы разберём исходный код, подробно объясним каждую часть, предложим варианты улучшения и включим контрольный список для тестирования и внедрения.

Основная идея и план

Цель проекта простая и прагматичная:

  • Создать очень лёгкое окно заметок, которое появляется мгновенно по горячей клавише.
  • Сохранять каждую заметку в обычный текстовый (Markdown) файл.
  • Минимум элементов — только заголовок, тело заметки и сохранение.

План действий:

  1. Установить AutoHotkey.
  2. Создать новый .ahk файл и открыть его в редакторе.
  3. Описать переменные для пути сохранения и суффикса имени файла.
  4. Создать GUI с двумя полями Edit и кнопкой OK.
  5. Реализовать обработчик кнопки для сохранения файла (включая очистку/санитизацию заголовка).
  6. Добавить обработчики закрытия/escape и инструкцию по назначению сочетания клавиш.

Установка AutoHotkey

  1. Перейдите на официальный сайт AutoHotkey и нажмите кнопку «Download». Выберите актуальную стабильную версию (обычно подпись “Download Current Version”).
  2. Установите программу — после установки AutoHotkey не меняет систему заметно: он выступает как интерпретатор для .ahk скриптов.

Совет: если вы новичок, короткое введение по синтаксису AutoHotkey поможет понять, как работают метки (labels), Gui, переменные и команды вроде FileAppend.

Создание нового скрипта

В Проводнике Windows: Правый клик → “Создать” → “AutoHotkey Script”. Альтернативно: создайте текстовый файл и переименуйте расширение TXT → AHK.

Откройте файл в вашем редакторе кода (Notepad++, VS Code, обычный Блокнот). Ниже — рабочая ядровая часть скрипта и пояснения.

New AHK Script From Right Click Menu

ALT: Меню Windows Проводника с пунктом “New > AutoHotkey Script”.

Основные переменные и настройка путей

Чтобы было удобно настраивать сохранение, зададим две переменные в начале скрипта:

NotesPath = A:\00_Cloud_Storage\Dropbox\Notes\Obsidian\Duckland!Inbox
FileNameExtra = _MUOnote.md

Пояснения:

  • NotesPath — полный путь к папке, куда будут сохраняться заметки. Обязательно замените на свой путь.
  • FileNameExtra — суффикс/расширение имени файла. Например, _MUOnote.md чтобы сохранить заметки в формате Markdown.

Важно: используйте двойные обратные слэши в строках кода в Windows‑пути, если вы помещаете путь в кавычки или в контекст, где обратный слэш имеет специальное значение. В простом присваивании AHK корректно воспринимает одиночные слэши, но явное удвоение безопаснее в документации.

Setting Up Variables in AHK

ALT: Фрагмент кода скрипта с переменными NotesPath и FileNameExtra, выделенные в редакторе.

Создание GUI: элементы интерфейса

Мы создадим окно с тремя элементами: поле заголовка, большое поле заметки и кнопку OK. Для удобства вынесем шрифты в отдельные строки.

Код для создания GUI:

Gui, QN:Font, s14 c666666
Gui, QN:Add, Edit, x5 y5 w550 h60 vTitle, Title - Filename
Gui, QN:Font, s12 c444444
Gui, QN:Add, Edit, x5 y70 w550 h600 vNote, %Clipboard%
Gui, QN:Add, Button, x5 y680 w550 h50, OK
Gui, QN:Show, x0 y0 w560 h735, MUONotes
return

Пояснения:

  • Gui, QN:Font — задаёт шрифт для последующих элементов: размер (s14), цвет (c666666 — серый).
  • Первый Edit — поле для заголовка (vTitle). Текст внутри используется как основа для имени файла.
  • Второй Edit — многострочное поле (vNote), предзаполняется содержимым буфера обмена (%Clipboard%).
  • Button — кнопка OK.
  • Gui, QN:Show — отображает окно в позиции x0 y0 с размерами.
  • return — важно завершить основной блок скрипта, иначе AHK продолжит выполнять последующие метки сразу.

Adding GUI Elements to AHK

ALT: Редактор с кодом добавления GUI-элементов в AHK и визуальное представление окна.

Обработчик кнопки: сохранение заметки

Добавим метку, которая будет срабатывать при нажатии кнопки OK и сохранять файл в NotesPath.

QNButtonOK:
FileEncoding, UTF-8-RAW
Gui, QN:Submit
TempClipboard = %ClipBoard%
ClipBoard = %Title%
gosub CleanText
FileName = %ClipBoard%
ClipBoard = %TempClipboard%
FinalFileName = %NotesPath%\%FileName%%FileNameExtra%
FileDelete, %FinalFileName%
FileAppend, %Note%, %FinalFileName%
return

Разбор по шагам:

  • FileEncoding, UTF-8-RAW — устанавливает кодировку создаваемого файла в UTF‑8 без BOM (подходит для Markdown и кодирования символов).
  • Gui, QN:Submit — подхватывает значения полей GUI в переменные (vTitle → Title, vNote → Note).
  • Мы временно сохраняем текущий буфер обмена в TempClipboard, затем помещаем Title в буфер обмена, чтобы использовать его как вход для процедуры очистки (CleanText). Это упрощает передачу строки в функцию без сложных аргументов.
  • gosub CleanText — вызывает метку, которая очищает текст от нежелательных символов и возвращает результат в ClipBoard.
  • FileName — получает очищенную строку из буфера обмена и используется в FinalFileName.
  • FileDelete заранее удаляет существующий файл с тем же именем (опционально), затем FileAppend записывает Note.

Примечание: если вы предпочитаете не затирать существующие файлы, пропустите FileDelete или добавьте логику нумерации.

AHK GUI Textboxes And Buttons

ALT: GUI с двумя полями ввода и кнопкой OK, показывающий пример заполнения.

Функция очистки заголовка (санитизация)

Чтобы имя файла было валидным и переносимым, мы удаляем все символы, кроме букв и цифр, и сводим множественные пробелы к одному.

CleanText:
CleanMePlease = %ClipBoard%
CleanMePlease := Regexreplace(CleanMePlease, "[^a-zA-Z0-9 ]", " ")
loop
{
    StringReplace, CleanMePlease, CleanMePlease, %A_SPACE%%A_SPACE%, %A_SPACE%, all
    if ErrorLevel <> 0
        break
}
ClipBoard = %CleanMePlease%
Return

Пояснения и уточнения:

  • Regexreplace заменяет все символы, кроме латинских букв, цифр и пробела, на пробел. Если вам нужны символы национальных алфавитов (кириллица, умляуты и т.д.), расширьте выражение, например, добавив диапазоны Unicode или конкретные символы.
  • Цикл убирает двойные пробелы, возникающие после замены на пробелы.
  • Результат возвращается в ClipBoard и далее копируется в FileName.

Важно: в исходной версии мы специально использовали латинские символы для совместимости с файловыми системами и сервисами синхронизации. Если вы используете только локальную систему с поддержкой UTF‑8 в именах файлов, можете изменить RegEx, чтобы разрешить кириллицу.

Обработка закрытия и выхода

Чтобы окно корректно завершало приложение и скрипт не оставался в трейе, добавим метки для Escape/Close:

QNGuiEscape:
QNGuiClose:
ExitApp
return

Разместите эти метки в конце файла. Они гарантируют, что при закрытии окна или нажатии Esc приложение полностью завершится.

Defining When AHK Should Exit The App

ALT: Скриншот с выделением кода ExitApp в AHK скрипте.

Полный минимальный пример скрипта

Ниже — собранный минимальный скрипт, который можно сохранить как MUONotes.ahk и запустить.

NotesPath = A:\00_Cloud_Storage\Dropbox\Notes\Obsidian\Duckland!Inbox
FileNameExtra = _MUOnote.md

Gui, QN:Font, s14 c666666
Gui, QN:Add, Edit, x5 y5 w550 h60 vTitle, Title - Filename
Gui, QN:Font, s12 c444444
Gui, QN:Add, Edit, x5 y70 w550 h600 vNote, %Clipboard%
Gui, QN:Add, Button, x5 y680 w550 h50, OK
Gui, QN:Show, x0 y0 w560 h735, MUONotes
return

QNButtonOK:
FileEncoding, UTF-8-RAW
Gui, QN:Submit
TempClipboard = %ClipBoard%
ClipBoard = %Title%
gosub CleanText
FileName = %ClipBoard%
ClipBoard = %TempClipboard%
FinalFileName = %NotesPath%\%FileName%%FileNameExtra%
FileDelete, %FinalFileName%
FileAppend, %Note%, %FinalFileName%
return

CleanText:
CleanMePlease = %ClipBoard%
CleanMePlease := Regexreplace(CleanMePlease, "[^a-zA-Z0-9 ]", " ")
loop
{
    StringReplace, CleanMePlease, CleanMePlease, %A_SPACE%%A_SPACE%, %A_SPACE%, all
    if ErrorLevel <> 0
        break
}
ClipBoard = %CleanMePlease%
Return

QNGuiEscape:
QNGuiClose:
ExitApp
return

Совет: перед использованием замените NotesPath на свой путь и убедитесь, что у вашего аккаунта есть права записи в эту папку.

Назначение горячей клавиши для запуска приложения

Самый надёжный способ — создать ярлык на рабочем столе, затем в Свойствах ярлыка задать “Shortcut key” и нажать комбинацию (например, Ctrl+Alt+N). Windows автоматически добавит комбинацию к ярлыку.

Альтернативно, можно добавить в системный автозапуск (Startup) или прописать горячую клавишу прямо в AHK‑скрипте, чтобы запускать второе окно без создания отдельного ярлыка. Пример, если ваш скрипт всегда запущен и вы хотите, чтобы по Ctrl+Alt+N показывался/скрывался GUI:

^!n::
Gui, QN:Show
return

Здесь ^ — Ctrl, ! — Alt, n — клавиша N.

Варианты улучшения и расширения (альтернативные подходы)

  1. Автоматическая нумерация файлов: если FinalFileName уже существует, добавлять суффикс _1, _2 и т.д.
  2. Добавить временную метку в имя файла: %A_Now% или форматированную дату для удобства сортировки.
  3. Поддержка тегов: хранить в имени файла или внутри Markdown фронтматтер (YAML) теги и метаданные.
  4. Добавить кнопку «Сохранить и открыть» — после FileAppend вызывать Run, %FinalFileName% чтобы открыть заметку в редакторе.
  5. Локальная поддержка кириллицы: изменить Regexreplace, чтобы разрешать диапазон кириллических символов.
  6. Синхронизация: сохранять в папку облачного хранилища (Dropbox, OneDrive) для доступа с других устройств.

Когда такой подход не подходит (ограничения и контрпримеры)

  • Требуется мощная организация, поиск по тегам, версии и блоки шаблонов — используйте Obsidian, Notion или специализированные приложения.
  • Нужна мобильная синхронизация с полноценным интерфейсом — лучше выбрать облачное приложение с мобильными клиентами.
  • Требуется сложная обработка вложений, изображений и бинарных файлов — AHK‑скрипт для plain text не подходит.

Модель зрелости: от прототипа до продакшена

  • Уровень 0 — Прототип: минимальный скрипт, как выше. Подходит для личного использования.
  • Уровень 1 — Надёжность: добавлена обработка ошибок, логирование, проверка прав доступа к папке.
  • Уровень 2 — Автоматизация: автозапуск при старте системы, горячие клавиши, поддержка тем/стилей.
  • Уровень 3 — Интеграция: синхронизация с облаком, плагины для поиска/индексации, резервное копирование.

Чек‑лист ролей (кто что должен проверить)

  • Пользователь:
    • Путь NotesPath установлен корректно.
    • Скрипт запускается и окно появляется по горячей клавише.
    • Заметка сохраняется в указанной папке.
  • Разработчик/автоматизатор:
    • Обработаны ошибки записи в файл.
    • Код имеет return после каждого логического блока.
    • Добавлен лог (по желанию) для отладки.
  • Администратор системы:
    • Папка для заметок доступна (права NTFS).
    • Политики безопасности не блокируют исполнение .ahk файлов.

Критерии приёмки

  1. Окно открывается и фокус устанавливается в поле заголовка не позднее 0.5 секунды после команды Show.
  2. Содержимое буфера обмена автоматически появляется в основном поле заметки.
  3. При нажатии OK создаётся файл с ожидаемым именем и кодировкой UTF‑8.
  4. Скрипт корректно завершает работу и не остаётся в трее после закрытия окна.

Тестовые случаи

  • TC1: Открыть окно, вставить текст в заголовок с недопустимыми символами, нажать OK → проверьте, что имя файла очищено и файл создан.
  • TC2: Вставить большое тело заметки (>10000 символов) → проверьте, что FileAppend не обрезает текст.
  • TC3: Папка NotesPath отсутствует → проверить поведение (предупреждение или автоматическое создание папки).
  • TC4: Параллельные вызовы (два открытия приложения) → проверить, не перезаписывается ли файл.

Советы по локализации и путям для русскоязычных пользователей

  • Если вы хотите использовать кириллицу в имени файла, измените регулярное выражение в CleanText, добавив диапазон \u0400-\u04FF (кириллица). Пример: “[^a-zA-Z0-9\u0400-\u04FF ]”.
  • При использовании облачных папок учтите особенности синхрона: некоторые сервисы не любят частых мелких файлов и могут приводить к задержкам.
  • Для совместимости с Windows рекомендую избегать специальных символов в именах файлов и лишних пробелов в начале/конце.

Безопасность и приватность

  • Скрипт сохраняет заметки в открытом виде в указанной папке. Если в заметках конфиденциальная информация, храните папку зашифрованной (например, контейнер VeraCrypt) или используйте шифрование на уровне файлов.
  • AutoHotkey‑скрипты потенциально могут запускать команды и иметь доступ к файловой системе — не запускайте скрипты из непроверенных источников.

Быстрые приемы и сниппеты (cheat sheet)

  • Запуск скрипта по сочетанию клавиш, если скрипт всегда запущен:
^!n::
Gui, QN:Show
return
  • Открыть сохранённый файл после сохранения:
FileAppend, %Note%, %FinalFileName%
Run, %FinalFileName%
  • Добавить временную метку в содержимое файла перед сохранением:
TimeStamp := "# " . A_Now . "`n`n"
FileAppend, %TimeStamp% . Note, %FinalFileName%

Глоссарий (одно предложение на термин)

  • AutoHotkey — скриптовый язык для автоматизации действий в Windows.
  • GUI — графический интерфейс пользователя (окно и его элементы в AHK).
  • FileAppend — команда AHK для добавления текста в файл.
  • Regexreplace — функция для замены по регулярному выражению.

Заключение

Создание ультра‑лёгкого приложения заметок с помощью AutoHotkey — практичная задача, не требующая сложных знаний. Вы получаете быстрое, настраиваемое решение, которое всегда под рукой и легко масштабируется. Если нужно больше функциональности (поиск, теги, мобильные клиенты), рассматривайте интеграцию с более продвинутыми инструментами или добавление плагинов.

Краткие рекомендации:

  • Настройте NotesPath и протестируйте запись в файл.
  • При необходимости расширяйте очистку заголовков под вашу локаль.
  • Не забывайте о безопасности при хранении конфиденциальных заметок.

Спасибо за внимание — удачного кодинга и продуктивных заметок!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как установить GIF‑обои в Windows 10 и 11
Windows

Как установить GIF‑обои в Windows 10 и 11

Массовое переименование файлов в Windows
Руководство

Массовое переименование файлов в Windows

Установка Docker Desktop на Mac
Разработка

Установка Docker Desktop на Mac

Как находить и воспроизводить GIF в Google Картинках
Руководство

Как находить и воспроизводить GIF в Google Картинках

Сделать Windows 10 похожей на Windows 7
Windows

Сделать Windows 10 похожей на Windows 7

Исправить 0x800700e9 при загрузке Xbox Game Pass
Windows

Исправить 0x800700e9 при загрузке Xbox Game Pass