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

Центрирование окна в Windows с AutoHotKey

8 min read Windows Обновлено 03 Apr 2026
Центрирование окна в Windows с AutoHotKey
Центрирование окна в Windows с AutoHotKey

Окно в центре экрана, пример скрипта AHK

Не раздражает ли вас, что окна в Windows иногда появляются в самых неожиданных местах экрана? Если вы хотите быстро и предсказуемо размещать текущее окно по центру экрана — это можно автоматизировать с помощью AutoHotKey. В этом руководстве вы получите понятный план, готовый скрипт и практические советы по использованию и отладке.

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

  • Быстро привести диалоговые окна и приложения в фокус без мыши.
  • Избежать лишнего поиска нужного окна на широких или нескольких мониторах.
  • Удобно при демонстрациях, удалённой поддержке и работе с окнами, которые часто открываются в произвольных позициях.

Важно: скрипт центрирует активное окно по запросу (горячая клавиша), а не насильственно на каждое открытие — это снижает риск помешать полноэкранным приложениям и играм.

Ключевая идея (в двух строках)

Определяем размеры активного окна и размеры экрана, вычисляем координаты так, чтобы окно оказалось по центру, затем вызываем команду WinMove для перемещения.

Одно предложение — что будет в конце

Вы получите рабочий AutoHotKey-скрипт: по нажатию CTRL+Y активное окно перемещается в центр основного экрана. Скрипт легко изменить под другую комбинацию клавиш или расширить для нескольких мониторов.


План действий — сначала мысль, затем код

Ниже — пошаговый план, который затем будет прямо преобразован в код:

  1. Назначить горячую клавишу для активации функции.
  2. Получить заголовок активного окна и его размеры.
  3. Узнать размеры экрана (AutoHotKey хранит их в переменных A_ScreenWidth/A_ScreenHeight).
  4. Вычислить координаты TargetX и TargetY для центрального положения.
  5. Вызвать WinMove с этими координатами.
  6. Добавить простую логику для переключения между мониторами (опционально).

Установка AutoHotKey и создание скрипта

  1. Скачайте установщик AutoHotKey с официального сайта и установите «current» (не v2-beta и не устаревшую 1.0, если хотите стабильности текущих релизов).
  2. Откройте Проводник (Win+E) и в нужной папке правой кнопкой выберите New > AutoHotKey Script.
  3. Дайте файлу понятное имя, затем правой кнопкой Edit Script (или открыть в VS Code/Notepad++).
  4. Если используете обычный Блокнот, сохраняйте как файл с расширением .ahk (не .txt).

Совет: не используйте Wordpad — он может добавить форматирование, мешающее работе скрипта.

Минимальная структура горячей клавиши

Сначала привяжем функцию к клавише. AutoHotKey использует специальные обозначения: + = Shift, ^ = Ctrl, ! = Alt, # = Win. Пример — привязка к Ctrl+Y:

^y::

; Место для кода

return

Двойные двоеточия :: отделяют триггер от тела обработчика. Строка return завершает обработчик.

Получаем данные активного окна

Замените комментарий в теле горячей клавиши на команды, которые получают заголовок и размеры окна:

WinGetTitle, ActiveWindowTitle, A
WinGetPos,,, Width, Height, %ActiveWindowTitle%

Пояснение:

  • WinGetTitle получает заголовок активного окна и сохраняет его в переменной ActiveWindowTitle.
  • WinGetPos возвращает позицию и размеры; мы читаем только Width и Height, пропуская ненужные значения.

Снятие размеров активного окна

Размеры экрана

AutoHotKey предоставляет встроенные переменные A_ScreenWidth и A_ScreenHeight — они уже содержат размеры видимой области основного монитора и готовы к использованию.

Вычисляем целевые координаты для центрирования

Числовые вычисления мы записываем в переменные TargetX и TargetY:

TargetX := (A_ScreenWidth/2)-(Width/2) ; горизонтальная цель
TargetY := (A_ScreenHeight/2)-(Height/2) ; вертикальная цель

Логика простая: половина ширины экрана минус половина ширины окна даёт координату левого края окна, при которой окно окажется по центру.

Расчёт координат для центрирования окна

Перемещаем окно

Команда WinMove перемещает окно по рассчитанным координатам:

WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%
  • Первый параметр — заголовок окна (мы передаём переменную с процентами).
  • Второй параметр (оставлен пустым) — текст, позволяющий уточнить окно, но для наших целей не нужен.
  • Третий и четвёртый — X и Y координаты.

Готовый базовый скрипт

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

#NoEnv  ; Рекомендуется для производительности и совместимости с будущими релизами AutoHotkey.
; #Warn  ; Включите при отладке для обнаружения частых ошибок.
SendMode Input  ; Быстрый и надёжный режим отправки ввода.
SetWorkingDir %A_ScriptDir%  ; Рабочая директория — папка скрипта.

^y::
    WinGetTitle, ActiveWindowTitle, A ; Получаем заголовок активного окна.
    WinGetPos,,, Width, Height, %ActiveWindowTitle% ; Получаем ширину/высоту активного окна.

    TargetX := (A_ScreenWidth/2)-(Width/2) ; Горизонтальная координата для центрирования.
    TargetY := (A_ScreenHeight/2)-(Height/2) ; Вертикальная координата для центрирования.

    WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; Перемещаем окно.

return

После сохранения двойной клик по файлу запустит скрипт (AutoHotKey должен быть установлен). Нажмите Ctrl+Y — активное окно переместится по центру основного монитора.

Расширение для двух и более мониторов (простой переключатель)

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

#NoEnv
; #Warn
SendMode Input
SetWorkingDir %A_ScriptDir%

PositionToggle = 1 ; Переключатель: 1 — основной монитор, 2 — второй.

^y::
    WinGetTitle, ActiveWindowTitle, A
    WinGetPos,,, Width, Height, %ActiveWindowTitle%

    If PositionToggle = 1
    {
        TargetX := (A_ScreenWidth/2)-(Width/2)
        TargetY := (A_ScreenHeight/2)-(Height/2)

        PositionToggle = 2
    }
    Else If PositionToggle = 2
    {
        SysGet, Mon2, Monitor, 2 ; Получаем параметры второго монитора.
        Mon2Width := Mon2Right - Mon2Left
        Mon2Height := Mon2Bottom - Mon2Top

        ; Вычисляем позицию на втором мониторе. Учтите смещение относительно основного монитора.
        TargetX := (Mon2Width/2)-(Width/2)+A_ScreenWidth
        TargetY := (Mon2Height/2)-(Height/2)+Mon2Top

        PositionToggle = 1
    }

    WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%

return

Примечания:

  • SysGet позволяет запросить параметры мониторов. Возвращаемые значения нужно использовать аккуратно, учитывая расположение второго монитора (слева или справа от основного, смещение по вертикали и т.д.).
  • Для сложных конфигураций (несколько мониторов с произвольным расположением) эту логику стоит усложнить: определять, на каком мониторе сейчас окно, и центрировать относительно его границ.

Когда это не сработает — типичные ограничения

  • Полноэкранные приложения и игры: их окна часто труднее или нельзя перемещать без нарушения состояния.
  • Окна без заголовка или с динамическими заголовками: использование заголовка как ключа может быть ненадёжным, в таких случаях можно использовать HWND (идентификатор окна).
  • Дескрипторы окон, у которых нет видимой области (например, всплывающие нативные элементы) — такие элементы иногда игнорируют WinMove.
  • Права и UAC: окна, запущенные от администратора, могут игнорировать попытки изменения позиции из процесса с обычными правами.

Как сделать надёжнее (альтернативные подходы)

  • Использовать HWND вместо заголовка: это точнее для окон без статичного заголовка. Пример получения HWND и использования:
WinGet, hwnd, ID, A
WinGetPos, , , Width, Height, ahk_id %hwnd%
WinMove, ahk_id %hwnd%, , %TargetX%, %TargetY%
  • Использовать сторонние утилиты: Microsoft PowerToys (FancyZones) предоставляет визуальные шаблоны разметки экрана.
  • Делать исключения по классам окон или заголовкам: если окно содержит определённый текст в заголовке, пропускайте его.
  • Запускать скрипт с повышенными правами, если цель — управлять окнами, запущенными от администратора.

Трюки и советы по кастомизации

  • Измените комбинацию клавиш (строка ^y::) на удобную для вас.
  • Добавьте проверку размеров окна: не пытайтесь центрировать окно, ширина которого превышает ширину экрана
if (Width > A_ScreenWidth)
{
    ; Не перемещаем и/или масштабируем
    return
}
  • Автоматическое центрирование при открытии окна: можно добавить наблюдатель, но это потребует дополнительной логики, чтобы не мешать полноэкранным приложениям.

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

  1. По нажатию назначенной клавиши активное окно должно перемещаться в центр видимой области основного монитора.
  2. Скрипт не должен ломать полноэкранные приложения (не вызывать их сворачивания).
  3. Поведение для второй мониторы (если используется расширенный скрипт) — повторное нажатие должно переключать монитор и корректно центрировать окно.

Проверочные сценарии (Test cases)

  • TC1: Обычное приложение с заголовком (Блокнот). Ожидается: при нажатии горячей клавиши окно перемещается в центр.
  • TC2: Приложение без обычного заголовка (графическая утилита). Ожидается: либо корректное центрирование, либо предсказуемый отказ (логическая обработка ошибки).
  • TC3: Полноэкранная игра. Ожидается: скрипт не мешает (не вызывает свёртывание и не пытается переместить).
  • TC4: Приложение, запущенное от администратора, при запущенном скрипте от обычного пользователя. Ожидается: возможно отсутствие эффекта — документируйте это как известный лимит.
  • TC5: Двойной монитор — второе нажатие переключает монитор и центрирует окно на втором дисплее.

Быстрая отладка (Troubleshooting)

  • Скрипт не реагирует: убедитесь, что файл .ahk запущен (иконка в трее) и AutoHotKey установлен.
  • Ничего не перемещается: откройте скрипт в режиме #Warn и временно раскомментируйте ; #Warn для поиска ошибок.
  • Окно меняет размер/сворачивается: возможно, приложение реагирует на WinMove иначе. Попробуйте использовать WinRestore/WinActivate перед перемещением.

Мини-методология безопасности и удобства

  • Делайте горячую клавишу редко используемой комбинацией, чтобы избежать конфликтов с приложениями.
  • Не делайте автозапуск для скриптов, которые вмешиваются в поведение полноэкранных приложений.
  • Храните резервную копию скрипта с комментариями перед внесением изменений.

Быстрые шаблоны и сниппеты

  • Изменение горячей клавиши на Alt+Shift+C:
!+c::
    ; ваш код
return
  • Использование HWND вместо заголовка (более надёжно):
WinGet, hwnd, ID, A
WinGetPos,,, Width, Height, ahk_id %hwnd%
TargetX := (A_ScreenWidth/2)-(Width/2)
TargetY := (A_ScreenHeight/2)-(Height/2)
WinMove, ahk_id %hwnd%,, %TargetX%, %TargetY%

Роль-ориентированные чек-листы

  • Для обычного пользователя:

    • Установлен AutoHotKey
    • Создан и запущен скрипт
    • Проверено центрирование на простом окне (Блокнот)
  • Для администратора/поддержки:

    • Учитывать приложения, запущенные от администратора
    • Проверить совместимость с политиками безопасности
    • Подготовить инструкцию по откату/отключению скрипта
  • Для продвинутого пользователя:

    • Заменить использование заголовков на HWND
    • Расширить логику для произвольных мониторов
    • Интегрировать с другими хоткеями/скриптами

Частые ошибки и их решения

  • Проблема: окно не центрируется, но скрипт работает — возможно, окно — дочернее или без заголовка. Решение: используйте WinGet, ID, A и ahk_id.
  • Проблема: некорректное центрирование на втором мониторе. Решение: проверьте значения Mon2Left/Mon2Top/Mon2Right/Mon2Bottom через MsgBox для отладки.

Полезные подсказки и альтернативы

  • FancyZones из PowerToys даёт визуальное управление зонами и поддерживает множественные макеты.
  • Сторонние программы-менеджеры окон (DisplayFusion, AquaSnap) предлагают расширенные возможности, но требуют установки ПО от третьих сторон.

Краткое резюме

  • AutoHotKey позволяет быстро создать надёжный хоткей для центрирования активного окна.
  • Базовый скрипт прост и безопасен: он действует только по запросу, не мешая полноэкранным приложениям.
  • Для сложных конфигураций с несколькими мониторами лучше использовать получение HWND и явное вычисление границ нужного монитора.

Окно после перемещения в центр экрана

Если вам нужно, я могу подготовить:

  • Версию скрипта, которая автоматически определяет, на каком мониторе находится активное окно, и центрирует относительно него.
  • Вариант с GUI для выбора мониторной зоны (визуальный выбор шаблона).

FAQ

Q: Можно ли центрировать окна без установки AutoHotKey? A: Да — некоторые менеджеры окон и PowerToys позволяют размещать окна по шаблонам, но AutoHotKey даёт максимальную гибкость и автоматизацию с минимальными ресурсами.

Q: Как сделать, чтобы скрипт центрировал окно автоматически при его создании? A: Это потребует фонового слежения за созданием окон и дополнительной логики, чтобы не мешать полноэкранным приложениям.

Q: Можно ли центрировать на конкретном мониторе, а не по переключателю? A: Да — используйте SysGet для получения границ нужного монитора и вычисляйте TargetX/TargetY относительно этих границ.


Конец руководства — теперь у вас есть всё необходимое, чтобы быстро центрировать окна с помощью AutoHotKey. Пользуйтесь сочетанием клавиш и экономьте время при работе с окнами!

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро