Как запускать программу на определенном мониторе в Windows

Проблема

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

Решение

Windows предоставляет несколько встроенных способов управления положением окон, которые не требуют установки стороннего ПО. Горячие клавиши Win + Shift + стрелки мгновенно переносят активное окно между дисплеями. PowerShell умеет находить процесс по имени и задавать координаты окна через Win32 API. Ярлык программы можно настроить так, чтобы окно запускалось в определённой позиции, которая соответствует нужному монитору. Для более сложных сценариев жёсткой привязки окон к зонам, автоматического размещения при запуске существует официальный инструмент Microsoft PowerToys с модулем FancyZones. Всё это опирается на документированные возможности Windows: MoveWindow functionSetWindowPos functionPowerShell documentation и PowerToys FancyZones. Для абсолютного контроля можно применять сторонние утилиты вроде DisplayFusion, но мы начнём с полностью бесплатных и встроенных методов.

Пошаговая инструкция

Шаг 1. Горячие клавиши для быстрого перемещения окон

Самый простой способ, который работает без предварительной настройки.

  1. Откройте программу, окно которой нужно переместить.
  2. Убедитесь, что окно активно (щелкните по нему мышью).
  3. Используйте сочетание клавиш Win + Shift + Стрелка влево или Win + Shift + Стрелка вправо. Окно мгновенно переместится на соседний монитор с сохранением размера.

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

Шаг 2. PowerShell-скрипт для точного размещения окна

PowerShell может взаимодействовать с Win32 API, чтобы задать конкретные координаты окна нужного процесса. Этот метод идеален для запуска по ярлыку или в скриптах.

Скрипт находит процесс по имени и перемещает его главное окно в заданную позицию:

powershell

Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Win32 {
    [DllImport("user32.dll", SetLastError=true)]
    public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
    [DllImport("user32.dll", SetLastError=true)]
    public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
}
"@

$processName = "notepad"          # Имя процесса без .exe
$targetX = 1920                   # X-координата (левый край нужного монитора)
$targetY = 0                      # Y-координата
$width = 1200
$height = 800

$proc = Get-Process -Name $processName -ErrorAction SilentlyContinue | Select-Object -First 1
if ($proc) {
    $hWnd = $proc.MainWindowHandle
    if ($hWnd -ne [IntPtr]::Zero) {
        [Win32]::MoveWindow($hWnd, $targetX, $targetY, $width, $height, $true)
        Write-Host "Окно '$processName' перемещено на X=$targetX, Y=$targetY"
    } else {
        Write-Host "Окно не найдено"
    }
} else {
    Write-Host "Процесс '$processName' не запущен"
}

Сохраните скрипт в файл Move-Window.ps1 и запускайте для нужного процесса. Координаты $targetX и $targetY подбираются под конкретную конфигурацию мониторов. Например, если основной монитор имеет разрешение 1920×1080, а второй — 1920×1080 и расположен справа, то для второго монитора $targetX = 1920$targetY = 0.

Для использования в ярлыке команда будет выглядеть так:

powershell.exe -ExecutionPolicy Bypass -File "C:\scripts\Move-Window.ps1"

Запустить ярлык можно после старта программы, либо обернуть запуск программы и перемещение в один скрипт:

powershell

Start-Process "notepad.exe"
Start-Sleep 2
# Затем код перемещения окна выше

Подробнее о вызове Win32 API из PowerShell см. в официальной документации.

Шаг 3. Настройка ярлыка для запуска в определённом месте

Если программе не нужно менять размер, можно задать координаты окна прямо в свойствах ярлыка.

  1. Щёлкните правой кнопкой мыши по ярлыку программы (можно создать новый ярлык для нужного .exe).
  2. Выберите Свойства.
  3. На вкладке Ярлык найдите поле Запуск (Target). После пути к программе можно добавить параметры, но для управления окном используется выпадающий список Окно. Однако это управляет только свёрнутым/развёрнутым состоянием, а не координатами.
  4. Гораздо эффективнее использовать поле Запуск для вызова PowerShell с перемещением (как в шаге 2), либо воспользоваться утилитами из шага 4.

Сам по себе ярлык Windows не даёт задать абсолютные координаты. Но комбинация cmd /c start "" "путь_к_программе" и последующего скрипта перемещения решает проблему.

Шаг 4. Microsoft PowerToys — FancyZones

FancyZones — официальный компонент PowerToys, который позволяет создавать на экране непересекающиеся зоны и назначать программам постоянное место в них.

  1. Установите PowerToys из Microsoft Store или с GitHub.
  2. Откройте PowerToys, перейдите в раздел FancyZones.
  3. Включите FancyZones, нажмите Запустить редактор зон.
  4. Выберите один из шаблонов (столбцы, строки, сетка) и настройте зоны под свой монитор. Можно создать зоны, перетаскивая границы мышью.
  5. На вкладке Поведение окон включите опцию Перемещать создаваемые окна в их последнюю известную зону. Теперь приложения, которые вы ранее размещали в определённых зонах, будут автоматически открываться там же.
  6. Также можно назначить конкретному приложению жёсткую привязку к зоне через Настройки приложений в FancyZones.

Документация по FancyZones: Microsoft Learn: FancyZones. Этот метод не требует написания скриптов и удобен для графических задач.

Шаг 5. Сторонние решения

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

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

ahk

Run, notepad.exe
WinWait, Untitled - Notepad
WinMove, 1920, 0

Этот скрипт запускает Блокнот и сразу перемещает его на координаты (1920, 0), что соответствует второму монитору.

Устранение распространённых проблем

СимптомВероятная причинаРешение
После перемещения PowerShell скриптом окно возвращается на старый мониторПриложение само управляет своим положением при запуске, перезаписывая координатыДобавьте в скрипт задержку (Start-Sleep 5) перед перемещением, чтобы дождаться полной инициализации окна.
FancyZones не запоминает зону для конкретного приложенияПриложение не поддерживает стандартные оконные сообщения WindowsВ настройках FancyZones попробуйте включить «Перемещать окна, удерживая Shift».
Win+Shift+стрелка не работаетСочетание клавиш перехвачено другой программой (например, утилитой видеокарты)Проверьте драйверы и горячие клавиши. Попробуйте другой метод.
Скрипт не находит окно (MainWindowHandle = 0)Приложение запущено, но главное окно скрыто или ещё не созданоИспользуйте Get-Process с задержкой, либо ищите окно через Win32 API FindWindow по заголовку.
Несколько мониторов отображаются как один (в настройках дисплея)Драйвер видеокарты настроил мониторы в режиме клонированияВ настройках экрана выберите «Расширить эти экраны», чтобы каждый монитор имел собственные координаты.

Итог

Настроить запуск программы на определенном мониторе Windows можно без дополнительных затрат, используя комбинацию горячих клавиш, PowerShell-скриптов и FancyZones. Эти методы закрывают все типичные сценарии: от быстрого разового перемещения до полного автоматического восстановления многомониторного рабочего пространства. При этом все инструменты официальные, не нарушают целостность системы и не требуют прав администратора для настройки (кроме установки PowerToys). Единожды написанный скрипт или настроенная зона экономят часы в течение года, а в корпоративной среде такой подход легко масштабируется через групповые политики и скрипты входа.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Популярные
Новые Старые

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
Menu