Все для работ с Windows - лучшей операционной системой от Microsoft. Мы охватываем все, от программы предварительной оценки Windows 10 до Windows 11. Предоставляет вам все последние новости о Windows 10 и не только.

Как центрировать любое окно на экране с помощью AutoHotKey

108

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

В этом уроке мы увидим, как вы можете решить эту проблему с помощью скрипта AutoHotKey. Мы построим его так, чтобы он перемещал любое окно в центр вашего экрана при нажатии клавиши. Звучит мило? Давайте посмотрим, как это делается!

Как настроить горячую клавишу для центрирования окна с помощью AutoHotKey

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

«Проблема» Windows

Windows (как в «прямоугольных штучках на наших экранах», а не в ОС) имеет тенденцию появляться в любом месте экрана. Это отвлекает, и это также может раздражать, когда это повторяется неоднократно. Особенно при работе с несколькими запросчиками, которые появляются в разных местах, ожидая ввода пользователя.

Решение проблемы

Помимо отправки нажатий клавиш и щелчков мыши в любое окно, AutoHotKey также может манипулировать ими. В прошлом мы видели, как вы можете использовать AutoHotKey для закрепления окон «всегда сверху» с помощью сочетания клавиш. На этот раз, однако, мы воспользуемся возможностями манипулирования окнами AutoHotKey, чтобы:

  1. "Прочитать" идентификатор активного окна.
  2. Также «прочитайте» его размеры (ширину и высоту).
  3. "Прочитайте" размеры монитора.
  4. Объедините размеры монитора и окна, чтобы вычислить оптимальные координаты для представления указанного окна в центре экрана.
  5. Переместите окно в эти координаты.

Наконец, мы сопоставим вышеуказанное с ярлыком. Таким образом, вы можете называть его «по запросу», а не применять ко всем окнам, что может мешать полноэкранным приложениям и играм.

Обратите внимание, что в этом уроке мы погрузимся прямо в AutoHotKey. Если вы не знакомы с ним и хотите узнать больше заранее, ознакомьтесь с нашим кратким руководством по AutoHotKey для начинающих.

Во-первых, настройка горячей клавиши

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

Начните с загрузки установщика с официального сайта AutoHotKey. Выберите «текущую» версию вместо бета-версии v2 или устаревшей версии 1.0. Затем установите его на свой ПК.

Запустите проводник (самый быстрый способ — с помощью комбинации клавиш Windows + E) и перейдите к пути, по которому вы хотите создать свой скрипт. После установки AutoHotKey в контекстном меню появятся новые параметры. Итак, щелкните правой кнопкой мыши пустое место окна Проводника и выберите «Создать» > «Сценарий AutoHotKey».

Как центрировать любое окно на экране с помощью AutoHotKey

Дайте имя файлу сценария, а затем щелкните его правой кнопкой мыши и отредактируйте. Если вы не используете удобное для кода приложение для редактирования текста, например Visual Studio Code или Notepad++, используйте Блокнот Windows. Избегайте таких редакторов, как Wordpad, которые могут добавить бесполезный (для этой цели) синтаксис в ваш «код».

В выбранном вами редакторе вы увидите, что в вашем скрипте AutoHotKey уже есть несколько предварительно заполненных строк вверху. Они нужны для стабильности и совместимости. Их можно настроить, но оставьте их такими, какие они есть для этого урока.

«Переместите» их на две-три строки ниже и введите ярлык, который запустит вашу функцию. Вы можете создать комбинацию клавиш, используя «+» для Shift, «^» для CTRL, «!» для Alt и «#» для клавиши Windows, а также любой «обычной» клавиши на клавиатуре (буквы и цифры).

Например, чтобы комбинация CTRL + Y запускала ваш скрипт, используйте:

^y::

Двойное ":" похоже на "Эй, AutoHotKey, пожалуйста, сопоставьте строку или комбинацию клавиш слева со всем, что справа".

«Переместитесь» на две или три строки ниже, нажав Enter, и введите «return», что будет означать конец конкретной функции. Полный результат должен выглядеть следующим образом:

^y::; This is a comment.return

"; Это комментарий." именно это и является комментарием в «коде» скрипта, который AutoHotKey не будет выполнять. Он предназначен для документации, чтобы отметить место, где мы будем вводить «код» сценария в следующих шагах.

Как центрировать любое окно на экране с помощью AutoHotKey

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

Получить сведения об активном окне

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

WinGetTitle, ActiveWindowTitle, AWinGetPos,,, Width, Height, %ActiveWindowTitle%

Замените строку комментария, которую мы добавили в сценарий в предыдущем разделе, на две строки выше. Результат?

Как центрировать любое окно на экране с помощью AutoHotKey

  • Первая строка захватывает заголовок активного окна.
  • Вторая строка считывает его ширину и высоту и сопоставляет их со словами/переменными «Ширина» и «Высота», которые мы будем использовать далее для наших вычислений.

Мы получили детали активного окна, но для достижения нашей цели нам также нужны размеры видимой области монитора. К счастью, найти их еще проще.

Как насчет области основного монитора?

Нам не нужны дополнительные команды, чтобы найти ширину и высоту нашего основного монитора. AutoHotKey поставляется с двумя предустановленными переменными, которые уже содержат эту информацию для нас: «A_ScreenWidth» и «A_ScreenHeight».

Итак, когда вы видите их в следующем разделе, они уже «содержат» ширину и высоту основного монитора. Ничего не нужно, чтобы присвоить им правильные значения. Таким образом, мы можем использовать их непосредственно в наших расчетах.

Время для расчета целевой позиции

Мы можем включать расчеты прямо в те точки скрипта, где они нам нужны. Тем не менее, проще и лучше для удобочитаемости, если мы сопоставим их с двумя переменными, а затем будем использовать эти переменные в нашем скрипте.

Итак, давайте выберем «TargetX» в качестве переменной, которая будет содержать горизонтальные координаты, и «TargetY» в качестве переменной с вертикальными координатами, куда мы должны переместить окно, чтобы оно появилось в центре экрана.

TargetX := (A_ScreenWidth/2)-(Width/2) ; Here we calculate the horizontal window target...TargetY := (A_ScreenHeight/2)-(Height/2) ; ...and here the vertical one.

Давайте расшифруем эти строки на простом английском языке:

  • «TargetX» и «TargetY» — это две переменные.
  • «:=» сообщает AutoHotKey, что переменные должны быть равны результатам вычислений справа и что эти результаты следует рассматривать как числа.
  • "(A_ScreenWidth/2)" делит полную ширину монитора на два.
  • "(Width/2)" делает то же самое для ширины активного окна.

Как центрировать любое окно на экране с помощью AutoHotKey

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

Теперь переместите окно

Вооружившись всемогущими знаниями, полученными из мистических команд, которые мы видели выше, мы теперь можем создать наше магическое заклинание, которое завершит ритуал телепортации в окно. Или, говоря простым языком, используйте команду AutoHotKey «WinMove», чтобы перемещать окна по экрану.

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

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

В приведенном выше:

  • «WinMove» — это команда AutoHotKey, которая перемещает окно.
  • «%ActiveWindowTitle%» — это переменная, в которую отображается заголовок активного окна.
  • "%TargetX%" и "%TargetY%" — горизонтальные и вертикальные координаты, куда переместить окно.

Вы также можете изменять размер окон с помощью WinMove, пропускать окна с определенным текстом в заголовках или содержимом и т. д. Поскольку эти функции выходят за рамки этой статьи, ознакомьтесь с официальной документацией AutoHotKey по команде WinMove, чтобы узнать о них больше.

Окончательный сценарий

Наконец, мы подошли к самой сложной части нашего путешествия. Приготовьтесь к следующему шагу, который ожидает, что вы сохраните сценарий и… запустите его.

Да, это было так — сценарий готов, и ничего больше не остается, как попробовать его. Используйте ярлык, который вы определили, и любое активное окно переместится в центр вашего экрана.

Как центрировать любое окно на экране с помощью AutoHotKey

Окончательный файл сценария, открытый в текстовом редакторе, должен выглядеть примерно так:

; SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.^y::   WinGetTitle, ActiveWindowTitle, A ; Get the active window's title for "targetting" it/acting on it.  WinGetPos,,, Width, Height, %ActiveWindowTitle% ; Get the active window's position, used for our calculations. TargetX := (A_ScreenWidth/2)-(Width/2) ; Calculate the horizontal target where we'll move the window.  TargetY := (A_ScreenHeight/2)-(Height/2) ; Calculate the vertical placement of the window.      WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; Move the window to the calculated coordinates.    return

Обратите внимание, что вы можете скопировать приведенный выше сценарий, вставить его в Блокнот или аналогичный текстовый редактор и сохранить с расширением AHK. Затем «запустите» его с установленным AutoHotKey, чтобы центрировать любое окно всякий раз, когда вы нажимаете CTRL + Y. Если вам не нравится этот ярлык, настройте строку «^y::» на другую комбинацию клавиш. Например, !+c::сопоставил бы функцию с комбинацией клавиш Shift + Alt + C.

Бонус трек

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

Чтобы упростить эту статью, мы вместо этого включили информацию о том, как скрипт работает в ней, в виде комментариев. Вы можете удалить их из своей итерации.

Краткая история о том, чем он отличается от приведенного выше сценария, заключается в том, что мы также добавляем переменную PositionToggle и некоторую «логику ЕСЛИ». Затем мы используем их для «перелистывания» окна между мониторами. Следует отметить, что это неэлегантное и «хакерское» решение проблемы. Однако мы предпочли его более упрощенному коду, поскольку этот подход легче понять и настроить для всех, кто не знаком с AutoHotKey.

; SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.PositionToggle = 1 ; Use a number as a toggle for marking on which monitor the window should appear.^y::   WinGetTitle, ActiveWindowTitle, A   WinGetPos,,, Width, Height, %ActiveWindowTitle%     If PositionToggle = 1 ; Check the toggle's state and "do what's between the curly brackets" if it's set to 1 for our primary monitor.  {       TargetX := (A_ScreenWidth/2)-(Width/2)      TargetY := (A_ScreenHeight/2)-(Height/2)        PositionToggle = 2 ; "Flick" the toggle so that if we reuse the hotkey, our active window will move to the second monitor.    }   Else If PositionToggle = 2 ; Have we used the hotkey before, "flicking" the toggle number to the second monitor? Then the script should instead do what's between the following curly brackets instead of the ones above.    {       SysGet, Mon2, Monitor, 2 ; Get the second monitor's details        Mon2Width := Mon2Right - Mon2Left ; Calculate the second monitor's actual width.       Mon2Height := Mon2Bottom - Mon2Top ; Calculate the second monitor's actual height.             TargetX := (Mon2Width/2)-(Width/2)+A_ScreenWidth ; Calculate where to move the window. Notice that we also add the primary monitor's width since AutoHotKey can't move windows on individual monitors but across their combined "surface".      TargetY := (Mon2Height/2)-(Height/2)+Mon2Top ; Calculate the optimal vertical target for moving the window on the second monitor. Like above, the second monitor's vertical details are detected in relation to the primary monitor. Thus, we have to get creative to get an optimal target by acknowledging how the second monitor's top isn't equal to 0 (like the primary one's).                PositionToggle = 1 ; Flick the toggle back so that if we reuse the hotkey, the window will move back to the primary monitor.    }       WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; The actual action, moving the active window to our calculated coordinates.    return

Центрировать окно с помощью ключа, простой способ

И теперь вы сделали! Если все работает хорошо, теперь вы можете использовать недавно настроенную горячую клавишу для центрирования окна в любое время.

Источник записи: makeuseof.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее