Skip to content

Latest commit

 

History

History
256 lines (169 loc) · 10.1 KB

File metadata and controls

256 lines (169 loc) · 10.1 KB

WindowResizer (WPF) — Фиксированный размер окна для презентаций и шаринга экрана

Иконка WindowResizer

Список открытых окон • Выбор окна • Принудительный единый размер (например, 1280×720 / 1920×1080) • Идеально для демонстраций и screen sharing

ЗачемФункцииКак работаетСтартСборка и релизЛокализацияОграничения и заметкиВкладReleases


Переводы

Хотите улучшить переводы? PR приветствуются. См. Локализация.


Что такое WindowResizer?

WindowResizer — лёгкая утилита для Windows (WPF / .NET), которая:

  1. Показывает список всех открытых видимых окон
  2. Позволяет выбрать окно
  3. Позволяет применить целевой размер (ширина × высота) с помощью популярных пресетов (720p / 1080p / 1440p и т. д.) или пользовательского размера

Особенно полезно, если вы:

  • часто презентуете
  • делаете шаринг экрана/окна
  • записываете демо/уроки
  • стримите или преподаёте онлайн

…потому что единый размер окна делает картинку чище:

  • окно проще красиво вписать в OBS/Meet/Teams/Zoom
  • компоновка “слайды + приложение” остаётся стабильной
  • области захвата не нужно постоянно перенастраивать

Важно: WindowResizer меняет размер окна, а не разрешение монитора.


Зачем это нужно

Если вы часто шарите экран/окна, вы уже знаете эти боли:

  • одно и то же окно приложения получается чуть разного размера на разных машинах
  • область захвата в OBS “плывёт”, когда окно двигают или меняют размер
  • элементы интерфейса выглядят крупнее/мельче в зависимости от размера окна и DPI
  • “просто потянуть окно мышкой” никогда не получается одинаково и отнимает время перед каждой демкой

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

  • выбрать окно
  • выбрать размер
  • готово

Функции

Управление окнами

  • Список открытых окон (заголовок + процесс + handle)
  • Поиск/фильтр по заголовку / процессу / handle
  • Выбор окна и принудительное применение целевого размера

Разрешения (размеры окна)

  • Быстрые пресеты (популярные “презентационные” размеры)
  • Полный список распространённых размеров
  • Добавление пользовательских размеров
  • Удаление пользовательских размеров
  • Пользовательские размеры сохраняются локально (персистентно)

UX / UI

  • Современный тёмный интерфейс с кастомной title bar (в стиле Windows 11)
  • Единый, быстрый для выбора и действия макет
  • Список окон на всю ширину, выровнен и прокручивается
  • Иконка приложения для профессионального вида в панели задач

Локализация

  • Встроенные языковые пакеты (XAML ResourceDictionaries)
  • Смена языка на лету (перезапуск не нужен)
  • Поддержка RTL (арабский) через переключение FlowDirection

Приватность по умолчанию

  • Нет телеметрии
  • Нет аналитики
  • Нет сетевых запросов
  • Приложение использует только стандартные Win32 API для перечисления и изменения размера окон

Как это работает

Внутри WindowResizer использует стандартные API Windows:

  • EnumWindows — перечисление окон верхнего уровня
  • IsWindowVisible, GetWindowText — фильтрация и получение заголовков
  • GetWindowThreadProcessId — привязка окон к имени процесса
  • GetWindowRect — чтение текущего размера окна
  • SetWindowPos — применение новой ширины/высоты (опционально сохраняя позицию)
  • ShowWindow(SW_RESTORE) — восстановление, если окно было свёрнуто, перед изменением размера

Приложение (best-effort) DPI-aware, чтобы размеры были более предсказуемыми на системах со scaling.


Старт

Требования

  • Windows 10/11
  • .NET SDK (рекомендуется: .NET 8 SDK)
  • Visual Studio 2022 (опционально, но удобно) или сборка через CLI dotnet

Запуск из исходников

dotnet restore
dotnet run

Сборка и релиз

Сборка (Release)

dotnet clean
dotnet build -c Release

Вывод:

.\bin\Release\net8.0-windows\

Публикация (рекомендуется)

Создаёт чистую папку для распространения.

Framework-dependent (меньше, нужен установленный .NET runtime)

dotnet publish -c Release

Вывод:

.\bin\Release\net8.0-windows\publish\

Self-contained (больше, .NET не требуется)

dotnet publish -c Release -r win-x64 --self-contained true

Вывод:

.\bin\Release\net8.0-windows\win-x64\publish\

Single-file EXE (опционально)

dotnet publish -c Release -r win-x64 --self-contained true `
  -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true

Хранение данных

WindowResizer хранит простые локальные настройки (например, язык и пользовательские размеры) в профиле пользователя (AppData).
Ничего никуда не отправляется.


Ограничения и заметки

  • Некоторые окна нельзя изменить по размеру (они могут блокировать или игнорировать SetWindowPos)
  • UWP-приложения, игры и специальные окна могут вести себя иначе
  • “Разрешение” здесь — это размер окна (ширина × высота), а не разрешение монитора
  • DPI scaling влияет на воспринимаемый размер; приложение старается быть DPI-aware, но поведение может отличаться между приложениями

Почему важен open source

Инструменты, которые взаимодействуют с другими окнами, должны быть прозрачными.

Open source означает:

  • любой может проверить, что делает приложение
  • нет скрытой телеметрии или неожиданного поведения
  • сообщество может улучшать и поддерживать проект в долгую

Проект намеренно небольшой, понятный и легко форкается — чтобы оставаться полезным тем, кому важна стабильная размерность окна в профессиональном процессе.


Лицензия

Подробности см. в файле LICENSE.