Как переместить окна, которые открываются вне экрана?

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

Есть ли какой-нибудь способ заставить конкретное окно попасть в видимую область?

22 ответа

Решение

Для пользователей Windows 7 и более поздних версий: + Shift + или переместит выбранное окно на монитор в этом направлении.

Я использую этот подход:

  • Используйте Alt+Tab для переключения на внеэкранное приложение.
  • Нажмите Alt+SPACE, чтобы вызвать системное меню (вы не увидите его, потому что оно не на экране)
  • Нажмите R, чтобы выбрать пункт меню "Восстановить", чтобы убедиться, что окна не развернуты (вы не можете переместить их, если они развернуты)
  • Снова нажмите Alt+SPACE, затем M, чтобы выбрать пункт меню "Переместить".
  • Нажмите одну из клавиш со стрелками, чтобы начать движение.
  • Теперь просто используйте мышь, чтобы разместить окно, где вы хотите.

Если вы используете неанглийскую версию Windows, варианты меню "R" и "M", вероятно, будут другими.

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

Информация от Как Выродка

Вы можете щелкнуть правой кнопкой мыши кнопку программы на панели задач, а затем нажать "Переместить". Теперь вы можете использовать кнопки со стрелками на клавиатуре, чтобы переместить окно, где вы можете его видеть. Требуется немного повозиться, иногда окна "застревают" по краям мониторов. Вы также можете попробовать использовать мышь, но клавиатура немного более надежна, если вы еще не видите окно;-)

Еще до того, как появилась панель задач, я исправлял эту проблему с помощью Alt+Space, чтобы вызвать меню окна, затем M для функции Move. Клавиши со стрелками позволят вам переместить окно обратно на экран.

Другой быстрый способ - щелкнуть правой кнопкой мыши на панели задач и выбрать Каскад Windows.

Я столкнулся с этой проблемой, и у меня абсолютно ничего не получалось. Поэтому я вошел в диспетчер задач и щелкнул правой кнопкой мыши программу, которая была за кадром. Переключиться на не работал, и не принести на фронт. Отметим, что это было статическое окно, поэтому максимизировать было невозможно через панель задач. Но вы можете максимизировать с помощью диспетчера задач, и это приносит его на ваш главный экран! Оттуда вы можете делать с окном все, что вам нужно.:)

Вы можете использовать NIRSOFT WinLister. Я заметил, что метод "Переместить" недоступен в Windows 7, когда вы используете классическую тему, и различные другие методы потерпели неудачу, поэтому я публикую свою альтернативу "ЕСЛИ все остальное терпит неудачу".

  1. Загрузите приложение WinLister здесь.

  2. Запустите WinLister от имени администратора и выберите окно, которое вы хотите вернуть на экран. Отказ от прав администратора не даст приложению возможность перемещать окна за вас.

  3. Щелкните правой кнопкой мыши и выберите "Центр выбранных окон", и все готово!

Скриншоты здесь.

Изменить: прекращено согласно комментариям

Чтобы быстро решить эту проблему в будущем и расположить приложения на двухэкранном экране, я могу порекомендовать http://www.winsplit-revolution.com/. Это сводит решение этой проблемы к простому нажатию клавиш Ctrl-Alt и клавиши цифровой клавиатуры, чтобы вернуть окно точно туда, где вы хотите.

Я только что столкнулся с этой проблемой с графическим интерфейсом Git в Windows 7, который основан на Tk и, как таковой, имеет тенденцию странным образом сбиваться с работы в Windows. Я попытался нажать Alt-Space и использовать команду перемещения, чтобы вернуть его обратно в поле зрения, но оно казалось застрявшим. Увеличение до максимума вернет его, но если я верну его в оконный режим, оно снова исчезнет.

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

Я использую изящный маленький инструмент под названием Shove-it, который просто проверяет, находится ли какое-либо окно за краем экрана, и снова помещает его обратно на экран. Это древнее программное обеспечение (и домашняя страница доказывает это), но работает на всех версиях Windows.

У меня была такая же проблема с winamp. Единственное (неудовлетворительное) решение, которое я нашел до сих пор: изменить разрешение экрана на другое и обратно

Томас

Для тех, кто знаком с PowerShell, попробуйте это:

  • Скопируйте и вставьте приведенный ниже код в сеанс PowerShell ISE.
  • Хит Ран
  • Нажмите ALT+TAB / что угодно, чтобы активировать закадровое окно
  • Подождите несколько секунд (5 секунд от нажатия RUN на сценарии)
  • Теперь должно появиться окно.

Если окно является основным, оно будет перемещено в верхний левый угол экрана.

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

Add-Type @"
    using System;
    using System.Runtime.InteropServices;

    // https://msdn.microsoft.com/en-us/library/windows/desktop/dd162897(v=vs.85).aspx
    public struct RECT 
    {
        public long left;
        public long top;
        public long right;
        public long bottom;
    }

    public class User32WinApi 
    {

        // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633505(v=vs.85).aspx
        /*
            Gets the handle of the in-focus window
            NB: In some scenarios this can be NULL; so code needed to handle such an event
        */
        [DllImport("user32.dll")]
        public static extern IntPtr GetForegroundWindow();

        // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633503(v=vs.85).aspx
        /*
            top & left are always 0 (i.e. since the rectangle is relative to the window itself)
            bottom & right equal the windows hieght and width, respectively.
        */
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);

        // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633534(v=vs.85).aspx
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);

    }

"@
$repaint = $true 
$windowSize = New-Object RECT

"Quick; get the window you're after in focus; you have 5 seconds..."
Start-Sleep -Seconds 5 #allow 5 seconds for the user to get the window they're after in focus (e.g. using ALT+TAB / whatever)
$activeWindow = [User32WinApi]::GetForegroundWindow()
if ($activeWindow) {
    if([User32WinApi]::GetClientRect($activeWindow, [ref]$windowSize)) {
        if ([User32WinApi]::MoveWindow($activeWindow, 0, 0, $windowSize.right, $windowSize.bottom, $repaint)) {
            "Window moved successfully (hope you agree!)"
        } else {
            Write-Warning "Failed to move the active window"
        }
    } else {
        Write-Warning "Failed to get size of the active window"    
    }
} else {
    Write-Warning "No active window found"    
}

Оригинальный код здесь: https://gist.githubusercontent.com/JohnLBevan/1593bbb860c2d2af436a1c9414e8adfa/

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

В этом случае, если вы можете открыть дополнительные экземпляры приложения, сделайте это. Первые несколько экземпляров почти наверняка появятся на панели задач как еще более призрачные окна. Продолжай делать это. Со временем они начнут заполнять основной вид. Затем используйте значок панели задач, чтобы щелкнуть правой кнопкой мыши и закрыть внеэкранные экземпляры. Когда не будет открыто ни одного закадрового экземпляра, закройте его на основном экране. В следующий раз, когда вы откроете это приложение, оно появится на основном экране, а не "от камеры".

Выберите окно (например, используя Alt+Tab). Затем удерживайте Alt+F7 и верните окно с клавишами со стрелками обратно в поле зрения. Готово.

Иногда трудно слепо узнать, где находится скрытое окно (и, следовательно, как его сдвинуть к экрану). Анимации во время выбора окна могут быть полезны. Из-за моих настроек (иногда я использую второй экран поверх экрана моего ноутбука), окна, которые появляются вне экрана, обычно находятся ниже. Поэтому, удерживая Alt+F7+Up, вы видите их.

Наведите курсор на панель задач.. щелкните правой кнопкой мыши, выберите "Показать окно рядом"..., чтобы вывести окно на экран... и, наконец, снова установите курсор на панель задач, щелкните правой кнопкой мыши, чтобы отменить показ окна рядом.

Я написал инструмент под названием Borderline, который будет автоматически перемещать закадровые окна обратно на экран при запуске. Вы должны запускать его, когда вам это нужно (лучше всего работает, если вы назначаете ему сочетание клавиш или помещаете его в меню "Пуск"), но это также означает, что он не всегда работает в фоновом режиме.

Иногда это решается:

  • Нажмите WinKey + P
  • Выберите для Extend или другой вариант, и все окна будут каскадными. Переместите желаемое окно на основной экран.

Вы также можете использовать UltraMon (несвободный, Windows, GUI), чтобы настроить сочетание клавиш для перемещения окна на следующий или предыдущий монитор.

введите описание здесь

Из Переместить окно в нижний / верхний монитор с помощью ярлыка в Windows от T. Marshall:

Я написал сценарий AHK.

Использование:

Win + Alt + Arrow: переместить активное окно на монитор, направление которого указано стрелкой. Обратите внимание, что это может привести к тому, что ваше окно выйдет за пределы экрана, если вы попытаетесь подняться с монитора 2 или прямо с монитора 3 в настройках. Я обновлю это в будущем.

Win + Alt + Number: переместить активное окно на указанный номер монитора

#Persistent

SysGet, MonitorCount, MonitorCount


#!Up::
  GoSub CalculateDisplacement
  WinMove, A, , %xPos%, %displaceYneg%
  return
#!Down::
  GoSub CalculateDisplacement
  WinMove, A, , %xPos%, %displaceYpos%
  return
#!Left::
  GoSub CalculateDisplacement
  WinMove, A, , %displaceXneg%, %yPos%
  return
#!Right::
  GoSub CalculateDisplacement
  WinMove, A, , %displaceXpos%, %yPos%
  return

#!1::
  GoSub CalculateDisplacement
  WinMove, A, , %xPosOn1%, %yPosOn1%
  return

#!2::
  if (MonitorCount > 1) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn2%, %yPosOn2%
  }
  return

#!3::
  if (MonitorCount > 2) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn3%, %yPosOn3%
  }
  return

#!4::
  if (MonitorCount > 3) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn4%, %yPosOn4%
  }
  return

#!5::
  if (MonitorCount > 4) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn5%, %yPosOn5%
  }
  return

#!6::
  if (MonitorCount > 5) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn6%, %yPosOn6%
  }
  return

#!7::
  if (MonitorCount > 6) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn7%, %yPosOn7%
  }
  return

#!8::
  if (MonitorCount > 7) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn8%, %yPosOn8%
  }
  return

#!9::
  if (MonitorCount > 8) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn9%, %yPosOn9%
  }
  return


CalculateDisplacement:
  WinGetPos, xPos, yPos, , , A
  Loop, %MonitorCount% {
    SysGet, MonitorDimension, Monitor, %A_Index%
    if (xPos > MonitorDimensionLeft and xPos < MonitorDimensionRight and yPos < MonitorDimensionBottom and yPos > MonitorDimensionTop) {
      currentMonitor = %A_Index%
    }
  }
  SysGet, thisMonitor, Monitor, %currentMonitor%
  displaceXpos := xPos + thisMonitorRight - thisMonitorLeft
  displaceYpos := yPos + thisMonitorTop - thisMonitorBottom
  displaceXneg := xPos - thisMonitorRight + thisMonitorLeft
  displaceYneg := yPos - thisMonitorTop + thisMonitorBottom
  Loop, %MonitorCount% {
    SysGet, nextMonitor, Monitor, %A_Index%
    xPosOn%A_Index% := xPos - thisMonitorLeft + nextMonitorLeft
    yPosOn%A_Index% := yPos - thisMonitorTop + nextMonitorTop
  }
  return

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

Это оконное меню также доступно с клавиатуры:

  1. Нажмите Windows+T, чтобы сфокусировать первую кнопку приложения на панели задач.
  2. Продолжайте нажимать Windows+T, пока не дойдете до нужного приложения или не используйте клавиши или для перемещения между кнопками;
  3. Нажмите , чтобы выбрать миниатюру первого окна приложения, при необходимости используйте или для выбора другого окна;
  4. Нажмите Shift+F10или, Menuесли это доступно на вашей клавиатуре;
  5. Нажмите «Переместить» и используйте клавиши или, чтобы начать перемещение окна.

Вышеупомянутое - это еще один способ получить доступ к тому же оконному меню , которое упоминается в ответах Терье Микала и Брэда Паттона . Он отображает оконное меню, доступное по Alt+Space.

Если команда «Переместить» отключена, возможно, вам придется сначала нажать «Восстановить».

Как переместить окна, которые открываются вне экрана?

Временно уменьшите разрешение экрана, возьмите верхнюю панель мышью и переместите центр. Подождите, пока система автоматически восстановит разрешение.

  1. DeskTop -> разрешение экрана
  2. Выберите свой монитор, выберите более низкое разрешение из текущих настроек.
  3. Система покажет новое разрешение, спросит, хотите ли вы сохранить или вернуть в течение 30 секунд.
  4. В течение 30 секунд возьмите найденное мисс окно и переместите его в центр.
  5. Подождите, пока время не вернется автоматически.

Окно сдвинулось...

Другие вопросы по тегам