261

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

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

21 ответ21

414

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

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

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

186

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

12

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

12

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

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

8

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

8

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

5

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

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

5

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

3

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

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

3

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

1

Для тех, кто знаком с 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/

1

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

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

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

  3. Щелкните правой кнопкой мыши и выберите «Center Selected Windows», и все готово!

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

1

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

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

1

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

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

1

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

Томас

0

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

0

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

Я написал сценарий 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
0

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

0

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

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

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

-1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .