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

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

<p>для пользователей windows 7 и более поздних версий: <kbd> <a href="https://i.stack.imgur.com/5qg8m.png"><img src="https://i.stack.imgur.com/5qg8m.png" alt="windows key"></a> </kbd>+<kbd>shift</kbd>+<kbd>←</kbd> или же <kbd>→</kbd> переместит выбранное окно на монитор в этом направлении.</p>

<p>я использую этот подход:</p><ul> <li>использование <kbd>alt</kbd>+<kbd>tab</kbd> переключиться на внеэкранное приложение.</li> <li>нажмите <kbd>alt</kbd>+<kbd>space</kbd> вызвать системное меню (вы не увидите его, потому что оно за кадром)</li> <li>нажмите <kbd>r</kbd> выбрать пункт меню "восстановить", чтобы убедиться, что окна не развернуты (вы не можете переместить их, если они развернуты)</li> <li>нажмите <kbd>alt</kbd>+<kbd>space</kbd> опять то <kbd>m</kbd> выбрать пункт меню "переместить".</li> <li>нажмите одну из клавиш со стрелками, чтобы начать движение.</li> <li>теперь просто используйте мышь, чтобы разместить окно, где вы хотите.</li> </ul><p>если вы используете неанглийскую версию windows, варианты меню "r" и "m", вероятно, будут другими.</p>

<p>для windows 10, чтобы использовать старое перемещение окна с трюком клавиш курсора, вам нужно иметь <kbd>shift</kbd> клавиша нажимается при открытии контекстного меню на панели задач.</p><p> <a href="https://i.stack.imgur.com/l7fok.png"><img src="https://i.stack.imgur.com/l7fok.png" alt="enter image description here"></a> </p><p>информация от <a href="http://www.howtogeek.com/howto/windows/bring-misplaced-off-screen-windows-back-to-your-desktop-keyboard-trick/">how to geek</a> </p>

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

<p>еще до того, как появилась панель задач, я раньше исправлял эту проблему <kbd>alt+space</kbd> вызвать меню окна, затем <kbd>m</kbd> для функции перемещения. клавиши со стрелками позволят вам переместить окно обратно на экран.</p>

<p>другой быстрый способ - щелкнуть правой кнопкой мыши на панели задач и выбрать каскад windows.</p>

<p>правка: прекращено согласно комментариям</p><p><em>чтобы быстро решить эту проблему в будущем и расположить приложения на двухэкранном экране, я могу порекомендовать <a href="http://www.winsplit-revolution.com/">winsplit revolution</a> . это сводит решение этой проблемы к простому нажатию клавиш ctrl-alt и клавиши цифровой клавиатуры окно обратно точно туда, где вы хотите.</em></p>

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

<p>я только что столкнулся с этой проблемой с графическим интерфейсом git в windows 7, который основан на tk и, как таковой, имеет тенденцию странным образом сбиваться с работы в windows. я попытался нажать alt-space и использовать команду перемещения, чтобы вернуть его обратно в поле зрения, но оно казалось застрявшим. увеличение до максимума вернет его, но если я верну его в оконный режим, оно снова исчезнет.</p><p>то, что я сделал, это максимизировал его, взял строку заголовка и перетащил ее в сторону экрана, чтобы aero snap уменьшил его до половины размера экрана и перевел в оконный режим. после этого я оттащил его от экрана и восстановил контроль над ним.</p>

<p>я использую изящный маленький инструмент под названием <a href="http://www.phord.com/shoveit.html">shove-it</a> , который просто проверяет, находится ли какое-либо окно за пределами экрана, и снова помещает его обратно на экран. это древнее программное обеспечение (и домашняя страница доказывает это), но работает на всех версиях windows.</p>

<p>для тех, кто знаком с powershell, попробуйте это:</p><ul> <li>скопируйте и вставьте приведенный ниже код в сеанс powershell ise.</li> <li>хит ран</li> <li>нажмите alt + tab/что угодно, чтобы активировать закадровое окно</li> <li>подождите несколько секунд (5 секунд от нажатия run на сценарии)</li> <li>теперь должно появиться окно.</li> </ul><p>если окно является основным, оно будет перемещено в верхний левый угол экрана.</p><p>если окно является дочерним окном другой программы, его верхний левый угол будет выровнен с верхним левым углом родительского окна.</p><pre class="lang-powershell prettyprint-override"><code>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" } </code></pre><p>оригинальный код здесь: <a href="https://gist.githubusercontent.com/johnlbevan/1593bbb860c2d2af436a1c9414e8adfa/">https://gist.githubusercontent.com/johnlbevan/1593bbb860c2d2af436a1c9414e8adfa/</a> </p>

<p>вы можете использовать nirsoft winlister. я заметил, что метод «переместить» недоступен в windows 7, когда вы используете классическую тему, и различные другие методы потерпели неудачу, поэтому я публикую свою альтернативу «если все остальное не работает».</p><ol> <li> <p>загрузите приложение winlister <a href="http://www.nirsoft.net/utils/winlister.html">здесь</a> .</p> </li> <li> <p>запустите winlister от имени администратора и выберите окно, которое вы хотите вернуть на экран. отказ от прав администратора не даст приложению возможность перемещать окна за вас.</p> </li> <li> <p>щелкните правой кнопкой мыши и выберите «center selected windows», и все готово!</p> </li> </ol><p>скриншоты <a href="http://mbakopoulos.wordpress.com/2013/02/14/bring-misplaced-off-screen-windows-back-to-your-desktop-if-all-else-fails/#more-402">здесь</a> .</p>

<p>в некоторых случаях, несмотря на наличие нескольких экранов в удаленном местоположении, у вас может не быть доступа к ним из вашего местоположения. ключевые команды не будут работать, потому что вы заблокированы из любого вида, который не на вашем экране.</p><p>в этом случае, если вы можете открыть дополнительные экземпляры приложения, сделайте это. первые несколько экземпляров почти наверняка появятся на панели задач как еще более призрачные окна. продолжай делать это. со временем они начнут заполнять основной вид. затем используйте значок панели задач, чтобы щелкнуть правой кнопкой мыши и закрыть внеэкранные экземпляры. когда не будет открыто ни одного закадрового экземпляра, закройте его на основном экране. в следующий раз, когда вы откроете это приложение, оно появится на основном экране, а не «от камеры».</p>

<p>выберите окно (например, используя <kbd>alt</kbd>+<kbd>tab</kbd>). тогда держи <kbd>alt</kbd>+<kbd>f7</kbd> и верните окно с клавишами со стрелками обратно в поле зрения. готово.</p><p>иногда трудно слепо узнать, где находится скрытое окно (и, следовательно, как его сдвинуть к экрану). анимации во время выбора окна могут быть полезны. из-за моих настроек (иногда я использую второй экран поверх экрана моего ноутбука), окна, которые появляются вне экрана, обычно находятся ниже. держа <kbd>alt</kbd>+<kbd>f7</kbd>+<kbd>up</kbd> поэтому приводит их в поле зрения.</p>

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

<p>вы также можете использовать <a href="http://www.realtimesoft.com/ultramon/">ultramon</a> (несвободный, windows, gui), чтобы настроить сочетание клавиш для перемещения окна на следующий или предыдущий монитор.</p><p><img src="https://i.stack.imgur.com/z8f7n.png" alt="enter image description here"></p>

<p>от <a href="https://softwarerecs.stackexchange.com/a/11837/903">переместите окно на нижний/верхний монитор с помощью ярлыка в windows</a> с помощью <a href="https://softwarerecs.stackexchange.com/users/6834/tymric">tymric</a> :</p><p>я написал сценарий ahk.</p><p>использование:</p><p><kbd>win</kbd> + <kbd>alt</kbd> + <kbd>arrow</kbd>: переместите активное окно на монитор, направление которого указано стрелкой. обратите внимание, что это может привести к тому, что ваше окно выйдет за пределы экрана, если вы попытаетесь подняться с монитора 2 или прямо с монитора 3 в настройках. я обновлю это в будущем.</p><p><kbd>win</kbd> + <kbd>alt</kbd> + <kbd>number</kbd>: переместить активное окно на указанный номер монитора</p><pre><code>#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 </code></pre>

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

<p>иногда это решается:</p><ul> <li>нажмите <kbd>winkey</kbd> + <kbd>p</kbd></li> <li>выберите <code>extend</code> или другую опцию, и все окна будут каскадными. переместите желаемое окно на основной экран.</li> </ul>

<p>я написал инструмент под названием <a href="http://www.taenarum.com/software/borderline.html">borderline</a> , который автоматически переместит закадровые окна обратно на экран при запуске. вы должны запускать его, когда вам это нужно (лучше всего работает, если вы назначаете ему сочетание клавиш или помещаете его в меню «пуск»), но это также означает, что он не всегда работает в фоновом режиме.</p>