it-swarm.dev

Como mover janelas que abrem fora da tela?

Eu tenho uma configuração de monitor duplo, e eu recentemente brinquei com as configurações de posicionamento, e alguns dos meus aplicativos de janela única fazem o favor de preservar onde eles foram fechados pela última vez, e abrindo na mesma posição mais tarde. Infelizmente, isso agora os coloca fora da área visível das minhas telas!

Existe alguma maneira de forçar uma janela específica para a área visível?

265
Matthew Scharley

Para usuários do Windows 7 e posterior: Windows Key+Shift+ ou  irá mover a janela selecionada para o monitor nessa direção.

192
andho

Eu uso essa abordagem:

  • Usar Alt+Tab para alternar para o aplicativo fora da tela.
  • Pressione Alt+SPACE para abrir o menu do sistema (você não o verá porque está fora da tela)
  • Pressione R para selecionar a opção de menu "Restaurar" para garantir que a janela não esteja maximizada (você não pode movê-la se estiver maximizada)
  • Pressione Alt+SPACE novamente, então M para selecionar a opção de menu "Mover".
  • Pressione uma das teclas de seta para iniciar o movimento.
  • Agora é só usar o mouse para colocar a janela onde você quiser.

Se você estiver usando uma versão do Windows que não seja em inglês, as opções de menu "R" e "M" provavelmente serão diferentes.

422
Terje Mikal

Para o Windows 10, a fim de usar o antigo mover a janela com as teclas do cursor truque você precisa ter o Shift tecla pressionada quando você abre o menu de contexto na barra de tarefas.

enter image description here

Info de Como Geek

14
Brad Patton

Você pode clicar com o botão direito do mouse no botão do programa na barra de tarefas e clicar em "Mover". Agora você pode usar os botões de seta no seu teclado para mover a janela onde você pode vê-lo. Requer alguns mexer, às vezes as janelas ficam "presas" nas bordas dos monitores. Você também pode tentar usar o mouse, mas o teclado é um pouco mais confiável se você ainda não consegue ver a janela ;-)

12
Emthigious

De volta antes de haver a barra de tarefas, eu costumava corrigir esse problema com Alt+Space para abrir o menu da janela, então M para a função Mover. As teclas de seta permitem que você mova a janela de volta na tela.

8
Greg Hewgill

Outra maneira rápida é clicar na barra de tarefas e selecionar Cascade Windows.

8
T. Kaltnekar

Edit: Descontinuado como por comentários

Para resolver rapidamente este problema no futuro, e para posicionar os aplicativos na tela dupla, posso recomendar Winsplit Revolution . Ele reduz a solução desse problema simplesmente pressionando Ctrl-Alt e uma tecla numérica para colocar a janela de volta exatamente onde você deseja.

5
Andy

Eu me deparei com esse problema e absolutamente nada funcionou para mim. Então entrei no Gerenciador de Tarefas e cliquei com o botão direito do mouse no programa que estava fora da tela. Mudar para não funcionou, nem trouxe para frente. Para observar, essa era uma janela estática, portanto, a maximização não estava disponível na barra de tarefas. Mas você pode maximizar através do Gerenciador de Tarefas, e isso traz para o seu monitor principal! De lá, você pode fazer o que precisar com a janela. :)

5
Leo

Acabei de me deparar com este problema com o Git GUI no Windows 7, que é baseado no Tk e, como tal, tende a falhar de formas estranhas, por vezes, no Windows. Eu tentei acertar o Alt-Space e usar o comando Mover para voltar à vista, mas parecia estar preso. Maximizá-lo traria de volta, mas se eu colocá-lo de volta no modo de janela, ele desapareceria novamente.

O que eu fiz foi maximizá-lo, pegar a barra de título e arrastá-lo para o lado da tela para que o Aero Snap dimensionasse para metade do tamanho da tela e colocá-lo no modo de janela. Depois disso, arrastei-o para o lado da tela e recuperei o controle dele.

3
unused

Eu uso uma pequena ferramenta chamada Shove-it que simplesmente verifica se alguma janela está fora da borda da tela e a empurra de volta para a tela novamente. É um software antigo (e a página inicial prova isso), mas funciona em todas as versões do Windows.

3
Torben Gundtofte-Bruun

Para qualquer pessoa familiarizada com o PowerShell, tente isto:

  • Copie e cole o código abaixo em uma sessão do ISE do PowerShell.
  • Fuga
  • Pressione ALT + TAB/whatever para tornar a janela fora da tela ativa
  • Aguarde alguns instantes (5 segundos depois de executar o RUN no script)
  • A janela deve aparecer agora.

Se a janela for uma janela principal, ela será movida para o canto superior esquerdo da tela.

Se a janela for uma janela filho de outro programa, seu canto superior esquerdo será alinhado com o canto superior esquerdo da janela pai.

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"    
}

Código original aqui: https://Gist.githubusercontent.com/JohnLBevan/1593bbb860c2d2af436a1c9414e8adfa/

1
JohnLBevan

Você poderia usar o NIRSOFT WinLister. Percebi que o método "Mover" não está disponível no Windows 7 quando você está usando o tema clássico, e vários outros métodos falharam, por isso estou postando minha alternativa "SE tudo mais falha".

  1. Baixe o aplicativo WinLister aqui .

  2. Execute o WinLister como Administrador e selecione a janela que você deseja mover novamente na Tela. Não executando como administrador não dará ao aplicativo a capacidade de mover as janelas para você.

  3. Clique com o botão direito e selecione "Center Selected Windows" e pronto!

Screenshots aqui .

1
user199343

Em alguns casos, apesar de ter várias telas no local remoto, talvez você não tenha acesso a elas a partir do seu local. Os comandos principais não funcionam porque você foi bloqueado de qualquer visualização que não esteja na tela.

Nesse caso, se você puder abrir instâncias adicionais do aplicativo, faça isso. As primeiras instâncias quase certamente aparecerão na barra de tarefas como ainda mais janelas fantasmas. Continue fazendo isso. Eventualmente, eles começarão a preencher a visão principal. Em seguida, use o ícone da barra de tarefas para clicar com o botão direito e fechar as instâncias fora da tela. Quando não houver nenhuma instância fora da tela aberta, feche as que estão na tela principal. Da próxima vez que você abrir o aplicativo, ele aparecerá na tela principal e não na "fora da câmera".

1
Greg Mayer

Selecione a janela (por exemplo, usando Alt+Tab). Então segure Alt+F7 e mova a janela com as teclas de seta de volta à vista. Feito.

Às vezes é difícil saber cegamente onde a janela oculta está localizada (e, portanto, como movê-la para a tela). Animações durante a seleção da janela podem ser úteis. Devido à minha configuração (ocasionalmente, uso uma segunda tela na parte superior da tela do meu laptop), as janelas que aparecem fora da tela geralmente estão abaixo. Segurando Alt+F7+Up portanto os traz à vista.

1
Georg Jung

Eu tive o mesmo problema com o winamp. A única solução (insatisfatória) que encontrei até agora: alterar a resolução da tela para outra diferente e voltar

Thomas

1
Thomas

Você também pode usar UltraMon (não-livre, Windows, GUI) para configurar um atalho de teclado para mover uma janela para o monitor seguinte ou anterior.

enter image description here

0
Franck Dernoncourt

De Mover uma janela para o monitor inferior/superior com um atalho no Windows por Tymric :

Eu escrevi um script AHK.

Uso:

Win + Alt + Arrow: Move a janela ativa para o monitor cuja direção é indicada pela seta. Observe que isso pode fazer com que a sua janela se mova para fora da tela se você tentar subir do monitor 2 ou direto do monitor 3 na sua configuração. Vou atualizá-lo no futuro.

Win + Alt + Number: Move a janela ativa para o número do monitor fornecido

#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

coloque o cursor na barra de tarefas ... clique direito selecione Mostrar janela lado a lado ... ele trará a janela na tela ... e finalmente trará novamente o cursor na barra de tarefas, clique com o botão direito e selecione desfazer a janela de exibição lado a lado.

0
ravi21

Às vezes, isso resolveu:

  • Clique WinKey + P
  • Escolha Extend ou outra opção e todas as janelas serão colocadas em cascata. Mova a janela desejada para a tela principal.
0
T.Todua

Eu escrevi uma ferramenta chamada Borderline que irá automaticamente mover janelas fora da tela de volta na tela quando executado. Você tem que executá-lo quando você precisar dele (funciona melhor se você atribuir um atalho de teclado ou colocá-lo no menu Iniciar), mas isso também significa que nem sempre está sendo executado em segundo plano.

0
jamesdlin