it-swarm-ru.tech

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

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

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

265
Matthew Scharley

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

192
andho

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

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

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

422
Terje Mikal

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

enter image description here

Информация от How To Geek

14
Brad Patton

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

12
Emthigious

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

8
Greg Hewgill

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

8
T. Kaltnekar

Правка: прекращено согласно комментариям

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

5
Andy

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

5
Leo

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

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

3
unused

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

3
Torben Gundtofte-Bruun

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

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

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

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

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

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

1
user199343

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

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

1
Greg Mayer

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

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

1
Georg Jung

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

Томас

1
Thomas

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

enter image description here

0
Franck Dernoncourt

От Переместите окно на нижний/верхний монитор с помощью ярлыка в 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
Franck Dernoncourt

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

0
ravi21

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

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

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

0
jamesdlin