Atalho no Windows 7 para alternar entre as janelas do mesmo aplicativo, como Cmd + `no OS X


38

Existe um atalho no Windows 7 para alternar entre janelas em um determinado aplicativo? Eu gosto muito desse recurso no OS X; qual é o seu equivalente no Windows?



<rant> Desejo que Redmond se concentre no UX e adicione mais atalhos de teclas do Windows, como nesta pergunta. Eles nos fornecem 99% das coisas que não queremos, mas não apenas facilitam nossas vidas, facilitando o uso do Windows. Eu acho que levaria um programador júnior por duas horas para adicionar um novo atalho para isso. </rant>
Pete Alvin

Respostas:


45

Se for um dos dez primeiros aplicativos na barra de tarefas, (Win)+ n, onde n é o número da sua posição, irá selecioná-lo e percorrer as janelas. (Use 0(zero) para o décimo aplicativo.) Por exemplo, eu tenho o Windows Explorer e o Internet Explorer fixados como as duas primeiras coisas na minha barra de tarefas, para que eu possa usar + 1para percorrer meus diretórios e + 2para percorrer meus navegadores.


Algumas notas estranhas:

  • Se você pressionar e segurar e tipo (e solte) um dígito n, o Windows irá abrir o  n º aplicativo na barra de tarefas. Tocar repetidamente n percorrerá as janelas desse programa, conforme discutido acima. Conforme  declarado pelo TranslucentCloud , se você digitar Shift+ n, ele passará por eles na ordem inversa, como Alt+ TabCtrl+ Tab, etc.

    Se o n º aplicativo na barra de tarefas é preso, mas não em execução, em seguida, + nvai iniciá-lo. 

  • Mas, se você pressionar e segurar eShift, desde o início, e digitarn, o Windows iniciará uma nova instância (ou pelo menos uma nova janela) desse aplicativo, mesmo se ele já estiver em execução.   (Isso falhará em alguns aplicativos, como o Windows Media Player, que não permitem a execução de várias janelas simultaneamente.)
  • + nparece não funcionar com o teclado numérico.

11
Isso não parece para trabalhar em uma configuração de multi tela onde você estender a barra de tarefas
Erfan

11
Ótimo. E Win + Shift + 1 circula pelas janelas inversamente.
TranslucentCloud

24

No Windows 7 e 8, embora não exista nenhum atalho disponível apenas no teclado, você pode segurar Ctrlenquanto clica no ícone da barra de tarefas do aplicativo em que está interessado. Cada vez que você fizer isso, uma janela diferente pertencente a esse aplicativo será exibida. venha para a frente.

Além disso, o programa VistaSwitcher configura Win+ F11e Alt+ `para alternar entre as janelas do aplicativo atual. (BTW, seu site diz que o Windows 8 não é suportado, mas tive sorte com o 8.1); o único problema que vi até agora é que às vezes lista coisas como a barra lateral de pesquisa como janelas abertas. Eu simplesmente ignoro isso, mas YMMV.)


2
ENORME melhoria da qualidade de vida. Embora uma tecla de atalho dedicada seja mais ideal, a solução WIN + # é severamente limitada pelo número de teclas, baixa ergonomia e um atraso terrível, sem mencionar a criação de conflito entre as teclas de atalho acessíveis (1-4) e a localização desejada da barra de início.
precisa saber é o seguinte

11
VistaSwitcher é lindo. Obrigado pela sugestão.
Dustin Oprea

Você também pode adicionar itens à lista de
exclusões

11
Eu amo o Vista Switcher Program.
Luke

11
parece que o sucessor do vistaswitcher, que é nomeado alt-tab terminator, não tem mais o recurso de tabulação entre o mesmo aplicativo
starcorn

23

Você pode usar o AutoHotkey: www.autohotkey.com

E coloque esse script lá:

!`:: ; Next window
WinGetClass, ActiveClass, A
WinGet, WinClassCount, Count, ahk_class %ActiveClass%
IF WinClassCount = 1
    Return
Else
WinGet, List, List, % "ahk_class " ActiveClass
Loop, % List
{
    index := List - A_Index + 1
    WinGet, State, MinMax, % "ahk_id " List%index%
    if (State <> -1)
    {
        WinID := List%index%
        break
    }
}
WinActivate, % "ahk_id " WinID
return

!^`:: ; Last window
WinGetClass, ActiveClass, A
WinGet, WinClassCount, Count, ahk_class %ActiveClass%
IF WinClassCount = 1
    Return
Else
WinGet, List, List, % "ahk_class " ActiveClass
Loop, % List
{
    index := List - A_Index + 1
    WinGet, State, MinMax, % "ahk_id " List%index%
    if (State <> -1)
    {
        WinID := List%index%
        break
    }
}
WinActivate, % "ahk_id " WinID
return

Funciona muito bem para mim. Usando a Autohotkey, também fiz minhas teclas de copiar / colar / desfazer ... como o Mac. Funciona bem!

Eras


2
Isso funciona muito bem com algumas ressalvas: 1) No Chrome, ele alterna entre todas as janelas do tipo Chrome, incluindo aplicativos como o Slack! 2) Para aplicativos modernos - e se você tiver apenas uma janela de aplicativo moderno aberta - ele abrirá outro aplicativo moderno aleatório (por exemplo, se você tiver o Calendário aberto e esse for o único aplicativo moderno aberto, ele abrirá "Configurações", ou "Esportes" ou "Correio" etc.)
Kirk Woll

@KirkWoll Isso mesmo. Definitivamente, há espaço para melhorá-lo. Eu não tive o tempo para realmente cavar Autohotkey para que isso aconteça ...
Seperman

Ótimo trabalho, usei imediatamente, obrigado. Alguns pontos: WinGet, Listretorna o número de janelas na Listvariável (em oposição ao List%n%pseudoarray em que os identificadores estão armazenados), para que você possa pular a WinGet, WinClassCountchamada e procurar List. Além disso, o código parece ser idêntico para as duas teclas de atalho.
Lebenita

não funciona comigo no Windows 10 de 64 bits e no Microsoft Office 2016. você pode ajudar?
Lucas

11
Isso funciona bem, no entanto, parece alternar entre TODAS as janelas, independentemente da área de trabalho. Estou usando o modo de exibição de tarefas extensivamente e preciso saltar pelas janelas apenas na mesma área de trabalho.
petr

8

Obrigado, Erasmose, mas sua versão do script autohotkey minimizará uma janela se não houver outras janelas desse tipo. Às vezes você não sabe, e minimizar é uma maneira irritante de descobrir, então modifiquei seu script da seguinte maneira:

!`::    ; Next window
WinGetClass, ActiveClass, A
WinGet, WinClassCount, Count, ahk_class %ActiveClass%
IF WinClassCount = 1
    Return
Else
WinSet, Bottom,, A
WinActivate, ahk_class %ActiveClass%
return

!+`::    ; Last window
WinGetClass, ActiveClass, A
WinActivateBottom, ahk_class %ActiveClass%
return

ah, e também mudei a última classe para usar shift em vez de ctrl, já que eu sou o modificador para retroceder com vários outros atalhos de teclado. Eu amo a chave automática.


11
Legal. Atualizei meu código com base no seu e também recebi um feedback no fórum da Autohotkey. O novo código não passará pelas janelas minimizadas, exatamente como no Mac.
Seperman

@ Seperman, e se eu quiser passar por janelas minimizadas também. O que tenho que mudar no seu script para fazer isso.
Ghos3t

Isso funciona bem, exceto que não se comportará corretamente nos aplicativos baseados no Chrome ou no Chrome / Electron (como o VS Code e o Slack), pois percorre todos eles.
otter.pro 29/07

Em vez de usar o nome da classe da janela, usei o nome do processo para ser agradável com aplicativos baseados em Electron e Firefox / Thunderbird. Script em gist.github.com/snmishra/794c5f41693510c46ba9bedc839696a8
Satya Mishra

7

Alguns aplicativos que implementam o MDI fornecem Ctrl + Tab para alternar entre "Documentos" na mesma instância do aplicativo. por exemplo, MS Office. Mas esse não é um recurso do Windows e depende do aplicativo. Para outros softwares, existem diferentes atalhos. por exemplo, o Firefox não fornece esse recurso, mas há um complemento que adiciona a funcionalidade.

Além disso, aqui está uma lista de atalhos de teclado fornecidos no Windows.

Além disso, existem discussões sobre atalhos de teclado no Windows.

Espero que ajude.


2
Além disso, alguns programas usam (Ctrl) + (F6) para isso. (Adicionar (Shift) a direcção inversa.)
Scott

5

O Easy Windows Switcher da Neosmart faz exatamente o que você procura.

Aqui está a descrição do site Easy Windows Switcher

O Easy Window Switcher facilita a alternância entre janelas diferentes alt+`( como alt + backtick) como em um Mac. Esqueça a necessidade de ter alt+tabentre um milhão e um de janelas abertas diferentes para encontrar a que você está procurando, com o Easy Window Switcher, separar as janelas do mesmo programa é apenas uma alt+`distância.


11
"sempre" não funciona. Se estiver trabalhando em um aplicativo diferente por algum tempo, volte e ele parará de funcionar.
Dushyant Bangal

4

O VistaSwitcher permite ou para esse recurso. É compatível com o Windows 10 (embora o nome sugira o contrário). No Windows 8 ou superior, sugiro adicionar certos aplicativos de metrô à lista de exclusões.

A resposta principal é boa, mas não funciona nas configurações de vários monitores, nas quais a barra de tarefas está configurada para mostrar apenas ícones no monitor ativo.


O Win + n funciona no meu sistema W7 com várias telas e a barra de tarefas é exibida apenas no monitor principal - foi isso que você quis dizer ou existe realmente uma maneira de fazer com que a barra de tarefas mude para o monitor atualmente ativo (o que eu imagino que seria uma distração) ?
Lebenita 01/09/16


1

Com o AutoHotkey também, um comportamento mais natural:

; Switch between windows of the same application with Alt+(key above Tab)
; Icon: made by Freepik (www.freepik.com), licence CC 3.0 BY
;       from https://www.flaticon.com/free-icon/switch-window_71630
; Script Licence: CC0 (Public Domain)
; Source: https://framagit.org/dr4Ke/AutoHotkey_scripts

KeyName := GetKeyName("sc029")
Menu, Tray, Tip, Switch between windows of the same applications with 'Alt+%KeyName%'

*!SC029::
WinGetClass, ActiveClass, A
WinGet, WinClassCount, Count, ahk_class %ActiveClass%
If WinClassCount = 1
    Return
WinGet, List, List, % "ahk_class " ActiveClass

index := 0
if not GetKeyState("Shift") {
    index := 1
}
;MsgBox, Entering Loop
While GetKeyState("Alt") {
    If GetKeyState("Shift") {
        index := Mod(List + index - 2, List) + 1
    } else {
        index := Mod(List + index, List) + 1
    }
    WinGet, State, MinMax, % "ahk_id " List%index%
    if (State == -1)
    {
        continue
    }
    WinID := List%index%
    WinActivate, % "ahk_id " WinID
    ErrorLevel := 1
    sleep 50
    While (ErrorLevel != 0) and GetKeyState("Alt") {
        KeyWait, sc029, DT1
    }
}
return

1

Criei um script do AutoHotkey para alternar entre as janelas do mesmo aplicativo que funcionam com aplicativos comuns do Windows , atalhos do Chrome e aplicativos do Chrome .

https://github.com/JuanmaMenendez/AutoHotkey-script-Open-Show-Apps/blob/master/AutoHotkey-script-Switch-Windows-same-App.ahk

Extra

Nesse repositório do Github, há outro script do AutoHotkey que pode funcionar bem em conjunto com este, porque você poderá abrir, restaurar ou minimizar seus aplicativos usando as teclas de atalho que deseja.

Exemplo:

  • F7:: OpenOrShowAppBasedOnExeName("C:\Windows\System32\SnippingTool.exe")
  • F8:: OpenOrShowAppBasedOnWindowTitle("Gmail", "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe --app=https://mail.google.com/mail/")

11
Esta é a única resposta que funciona corretamente no Chrome, pois não trata o aplicativo baseado em Chrome e Electron da mesma forma. Funciona perfeitamente no Chrome, no VS Code, no Slack etc. (em casos raros, não funciona corretamente em certos aplicativos como Mintty / Cygwin, gVim e, às vezes, no Powershell, se o título do Windows for alterado)
otter. pro

0

Criei um script AutoHotkey que se integra perfeitamente ao Windows Task Switcher ( Alt+ Tab), fornecendo todos os seus benefícios: visualizações de janelas de aplicativos, clique para selecionar, navegação pelas teclas de seta, apenas ative a única janela que você deseja. Invoque / navegue com Alt+ `e Alt+ Shift+ `(backtick) para alternar entre janelas com o mesmo nome de processo que a janela atual. Acho isso mais útil do que Win+ num, pois funciona para qualquer aplicativo (em vez de ter que lembrar o número do slot fixado), as visualizações da janela são maiores, o fundo não fica desfocado e combina perfeitamente com o Alt+ Tabnavigation. Testado no Windows 10.

O truque principal é ocultar temporariamente janelas de aplicativos não-alvo do Alternador de tarefas, definindo WS_EX_TOOLWINDOWe desmarcando WS_EX_APPWINDOW. Para definir esses estilos de janelas em janelas executando como administrador, o AutoHotkey precisa ser assinado ou executado como administrador . Eu segui as instruções de assinatura muito fáceis aqui .

Alguns tópicos relacionados que contribuíram:

!`::
{
   WS_EX_TOOLWINDOW = 0x80
   WS_EX_APPWINDOW = 0x40000
   tw := []
   aw := []

   WinGet, processName, ProcessName, A

   DetectHiddenWindows, Off
   AltTab_window_list(1)

   Loop, %AltTab_ID_List_0%
   {
      wid := AltTab_ID_List_%A_Index%
      WinGet, processName2, ProcessName, ahk_id %wid%

      if (processName2 != processName)
      {
         WinGet, exStyle2, ExStyle, ahk_id %wid%

         if (!(exStyle2 & WS_EX_TOOLWINDOW))
         {
            tw.InsertAt(0, wid)
            WinSet, ExStyle, ^0x80, ahk_id %wid%
         }

         if ((exStyle2 & WS_EX_APPWINDOW))
         {
            aw.InsertAt(0, wid)
            WinSet, ExStyle, ^0x40000, ahk_id %wid%
         }
      }
   }

   Send {Alt Down}{Tab} ; Bring up switcher immediately

   KeyWait, ``, T.25  ; Go to next window; wait .25s before looping
   if (Errorlevel == 0)
   {
      While ( GetKeyState( "Alt","P" ) )
      {
         KeyWait, ``, D T.25
         if (Errorlevel == 0)
         {
            if (GetKeyState( "Shift","P" ))
            {
               Send {Alt Down}{Shift Down}{Tab}
               Sleep, 200
            }
            else
            {
               Send {Alt Down}{Tab}
               Sleep, 200
            }
         }
      }
   }

   Send {Alt Up} ; Close switcher on hotkey release

   for index, wid in tw
   {
      WinSet, ExStyle, ^0x80, ahk_id %wid%
   }

   for index, wid in aw
   {
      WinSet, ExStyle, ^0x40000, ahk_id %wid%
   }
}
return

AltTab_window_list(excludeToolWindows)
{
   global
   WS_EX_CONTROLPARENT =0x10000
   WS_EX_APPWINDOW =0x40000
   WS_EX_TOOLWINDOW =0x80
   WS_DISABLED =0x8000000
   WS_POPUP =0x80000000
   AltTab_ID_List_ =0
   WinGet, Window_List, List,,, Program Manager ; Gather a list of running programs
   id_list =
   Loop, %Window_List%
   {
      wid := Window_List%A_Index%
      WinGetTitle, wid_Title, ahk_id %wid%
      WinGet, Style, Style, ahk_id %wid%

      If ((Style & WS_DISABLED) or ! (wid_Title)) ; skip unimportant windows
         Continue

      WinGet, es, ExStyle, ahk_id %wid%
      Parent := Decimal_to_Hex( DllCall( "GetParent", "uint", wid ) )
      WinGetClass, Win_Class, ahk_id %wid%
      WinGet, Style_parent, Style, ahk_id %Parent%

      If ((excludeToolWindows & (es & WS_EX_TOOLWINDOW))
         or ((es & ws_ex_controlparent) and ! (Style & WS_POPUP) and !(Win_Class ="#32770") and ! (es & WS_EX_APPWINDOW)) ; pspad child window excluded
         or ((Style & WS_POPUP) and (Parent) and ((Style_parent & WS_DISABLED) =0))) ; notepad find window excluded ; note - some windows result in blank value so must test for zero instead of using NOT operator!
         continue
      AltTab_ID_List_ ++
      AltTab_ID_List_%AltTab_ID_List_% :=wid
   }  
   AltTab_ID_List_0 := AltTab_ID_List_
}


Opa; nossas edições foram cruzadas. Tentei juntar o Humpty Dumpty novamente; verifique se seu código é o que você queria que fosse.
Scott

0

Usando a Autohotkey, aqui está minha versão, que funciona com aplicativos Chrome e Electron. Foi modificado a partir da resposta de @ user332861 , de modo a distinguir corretamente os aplicativos Chrome e Electron, como Slack e Visual Studio Code. (Para fazer isso, ele usa em ahk_exevez de ahk_class)

!`::    ; Next window if using alt-backtick
    WinGet, ExeName, ProcessName , A
    WinGet, ExeCount, Count, ahk_exe %ExeName%
    If ExeCount = 1
        Return
    Else
        WinSet, Bottom,, A
        WinActivate, ahk_exe %ExeName%
return

!+`::    ; prev window, Alt+shift+backtick
    WinGet, ExeName, ProcessName , A
    WinActivateBottom, ahk_exe %ExeName%
return

0
!`::
#`::
WinGet, ExeName, ProcessName, A
WinActivateBottom, ahk_exe %ExeName%
return

Simplificado a partir da resposta de @ otter.pro. Isso simplesmente alterna entre as janelas atuais do aplicativo. Andar de bicicleta para a frente pode fazer aparecer breves flashes de outras janelas. Como não ver flashes é provavelmente mais importante que o ciclismo bidirecional, apenas não avance. Além disso, esta resposta permite # `como uma alternativa ao!`, Pois essa é a combinação de teclas para o atalho do Mac.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.