Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

КринжСкрин

Лёгкое приложение для создания скриншотов в Windows: живёт в трее, захватывает экран по хоткею, даёт быстро разметить снимок и сохраняет/копирует результат.

Возможности

  • Захват: весь экран, активное окно (через DWM extended frame bounds, без лишней рамки/тени), произвольная область (выделение мышью поверх снимка рабочего стола).
  • Скролл-скриншот: выбираете область — приложение само прокручивает её колесом мыши и склеивает кадры в одно длинное изображение.
  • Редактор поверх скриншота: стрелки, текст, размытие (пикселизация) выбранной области, обрезка, undo/redo.
  • Сохранение: PNG или JPG (с настраиваемым качеством), автосохранение в выбранную папку, копирование в буфер обмена.
  • Глобальные хоткеи: назначаются в настройках, работают из любого приложения.
  • Трей: иконка в системном трее с меню быстрых действий, без главного окна.
  • История снимков: список последних N сохранённых скриншотов с превью, открытием и копированием.

Хоткеи по умолчанию: Ctrl+Alt+F — весь экран, Ctrl+Alt+A — область, Ctrl+Alt+W — активное окно, Ctrl+Alt+S — скролл-скриншот. Меняются в Настройках.

Архитектура

KrinzhScreen.sln
├── src/KrinzhScreen.Core   — кроссплатформенная логика (net8.0, без зависимостей от UI)
│   ├── Models              — AppSettings, HotkeyBinding, HistoryItem, enum'ы
│   ├── Settings             — чтение/запись settings.json
│   ├── History               — чтение/запись history.json
│   ├── Naming                 — генерация имён файлов
│   └── Stitching                — алгоритм склейки скролл-скриншота (юнит-тестируемый, без GDI+)
│
├── src/KrinzhScreen.App    — Windows-приложение (net8.0-windows, WinForms)
│   ├── Native               — P/Invoke (RegisterHotKey, DwmGetWindowAttribute, mouse_event)
│   ├── Capture                — ScreenCapture, RegionSelectorForm, ScrollCaptureService
│   ├── Editor                   — EditorCanvas/EditorForm + аннотации (стрелка/текст/блюр)
│   ├── Clipboard                  — работа с буфером обмена
│   ├── Storage                      — сохранение PNG/JPG на диск
│   ├── UI                             — трей-меню, окно настроек, окно истории
│   ├── TrayApplicationContext            — точка сборки всего вместе
│   └── Program.cs                          — точка входа, singleton-инстанс через Mutex
│
└── tests/KrinzhScreen.Core.Tests  — xUnit-тесты для алгоритма склейки и именования файлов

Ядро (KrinzhScreen.Core) намеренно не зависит от System.Drawing/WinForms, чтобы алгоритм склейки скролл-скриншота и работа с настройками/историей были тестируемыми без Windows-окружения. Весь Win32/GDI+ код изолирован в KrinzhScreen.App.

Сборка и запуск

Нужен Windows и .NET 8 SDK (в этой среде разработки нет ни Windows, ни .NET SDK, поэтому код не собирался и не запускался здесь — соберите и проверьте на своей машине).

dotnet build
dotnet run --project src/KrinzhScreen.App
dotnet test tests/KrinzhScreen.Core.Tests

Либо откройте KrinzhScreen.sln в Visual Studio 2022+ (workload "Разработка классических приложений .NET").

При первом запуске приложение создаёт %AppData%\KrinzhScreen\settings.json и history.json, папку для скриншотов по умолчанию — Изображения\KrinzhScreen.

Известные ограничения

  • Скролл-скриншот — эвристический алгоритм (сравнение кадров до/после прокрутки, без доступа к внутреннему состоянию скроллящегося приложения). Хорошо работает на статичном контенте (статьи, код, переписки), может ошибаться на анимациях, ленивой подгрузке или "прилипающих" элементах.
  • Клавиша Win в хоткеях не назначается через UI — WinForms ненадёжно ловит её через обычный KeyDown. Модель это поддерживает (HotkeyBinding.Win), но выбор ограничен Ctrl/Alt/Shift.
  • Иконка трея рисуется в рантайме (TrayIconFactory), а не берётся из .ico-ресурса — упрощает сборку, но не даёт кастомизировать её без правки кода.
  • Обрезка (Crop) в редакторе — это финальная область, применяемая при сохранении/копировании; сам холст в редакторе не меняет размер при выборе области обрезки.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages