Acceso directo en Windows 7 para cambiar entre las ventanas de la misma aplicación, como Cmd + `en OS X

38

¿Hay un acceso directo en Windows 7 para cambiar entre ventanas solo en una aplicación determinada? Me gusta mucho esta característica en OS X; ¿Cuál es su equivalente en Windows?

jiejieup
fuente
1
Relacionado (pero para Linux): Linux Mint: cambia entre ventanas de la misma aplicación .
Scott
<rant> Deseo que Redmond se concentre en UX y agregue más accesos directos de teclas de Windows, como para esta pregunta. Nos dan el 99% de las cosas que no queremos, pero no solo nos hacen la vida más fácil al hacer que Windows sea más fácil de usar. Supongo que le tomaría a un programador junior dos horas agregar un nuevo atajo para esto. </rant>
Pete Alvin

Respuestas:

45

Si es una de las primeras diez aplicaciones en la barra de tareas, entonces (Win)+ n, donde n es su número de posición, lo seleccionará y pasará por las ventanas. (Use 0(cero) para la décima aplicación.) Por ejemplo, tengo Windows Explorer e Internet Explorer anclado como las dos primeras cosas en mi barra de tareas, por lo que puedo usar + 1para recorrer mis directorios y + 2para recorrer mis navegadores.


Algunas notas extrañas:

  • Si se mantiene pulsado y el tipo (y liberación) un dígito n, Windows abrirá el  n º aplicación en la barra de tareas. Al tocar repetidamente n se recorrerán las ventanas de ese programa, como se discutió anteriormente. Como lo  indica TranslucentCloud , si luego escribe Shift+ n, pasará por ellos en orden inverso, como con Alt+ TabCtrl+ Tab, etc.

    Si el n se fija º aplicación en la barra de tareas, pero no se está ejecutando, entonces + ncomenzará a ella. 

  • Pero, si mantiene presionado yShift, desde el principio, y luego escriben, Windows iniciará una nueva instancia (o al menos una nueva ventana) de esa aplicación, incluso si ya se está ejecutando.   (Esto fallará para algunas aplicaciones, como Windows Media Player, que no permiten que se ejecuten varias ventanas simultáneamente).
  • nParece que + no funciona con el teclado numérico.
Scott
fuente
1
Esto no parece funcionar en una configuración de pantalla múltiple donde se extiende la barra de tareas
Erfan
1
Excelente. Y Win + Shift + 1 recorre las ventanas a la inversa.
TranslucentCloud
24

En Windows 7 y 8, aunque no hay un atajo que conozca disponible solo desde el teclado, puede mantenerlo presionado Ctrlmientras hace clic en el icono de la barra de tareas de la aplicación que le interesa. Cada vez que haga esto, aparecerá una ventana diferente perteneciente a esa aplicación Ven a la vanguardia.

Además, el programa VistaSwitcher configura Win+ F11y Alt+ `para cambiar entre las ventanas de la aplicación actual. (Por cierto, su sitio web dice que Windows 8 no es compatible, pero tuve suerte con él en 8.1; el único problema que he visto hasta ahora es que a veces enumera cosas como la barra lateral de búsqueda como ventanas abiertas. Simplemente ignoro eso, pero YMMV.)

Echristopherson
fuente
2
ENORME mejora de la calidad de vida. Si bien una tecla de acceso rápido dedicada sería más ideal, la solución WIN + # está severamente limitada por la cantidad de teclas, una ergonomía deficiente y un retraso terrible, sin mencionar la creación de conflictos entre las teclas de acceso rápido accesibles (1-4) y la ubicación deseada de la barra de inicio.
bpcookson
1
VistaSwitcher es hermoso. Gracias por la sugerencia.
Dustin Oprea
También puede agregar elementos a la lista de exclusión como "Nueva notificación" y "Cortana" en Windows 10.
dragon788
1
Me encanta el programa Vista Switcher.
Lucas
1
parece el sucesor de vistaswitcher, que lleva el nombre alt-tab terminatorya no tiene la función de tabulación entre la misma aplicación
starcorn
23

Puede usar AutoHotkey: www.autohotkey.com

Y pon este script allí:

!`:: ; 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 muy bien para mi. Usando Autohotkey también hice mi copiar / pegar / deshacer, ... teclas como Mac. ¡Funciona genial!

Eras

Seperman
fuente
2
Esto funciona muy bien con algunas advertencias: 1) Para Chrome, hará un ciclo de todas las ventanas similares a Chrome, incluidas aplicaciones como Slack. 2) Para aplicaciones modernas, y si solo tiene una ventana de aplicación moderna abierta, se abrirá una aplicación moderna aleatoria (es decir, si tiene abierto el Calendario y esa es la única aplicación moderna abierta, abrirá "Configuración", o "Deportes", o "Correo", etc.)
Kirk Woll
@KirkWoll Eso es correcto. Definitivamente hay espacio para mejorarlo. No he tenido tiempo de profundizar en Autohotkey para que esto suceda ...
Seperman
Buen trabajo, lo usé de inmediato, gracias. Algunos puntos: WinGet, Listdevuelve el número de ventanas en la Listvariable (a diferencia del List%n%pseudoarray en el que se almacenan los identificadores), por lo que puede omitir la WinGet, WinClassCountllamada y verificar en su Listlugar. Además, el código parece ser idéntico para ambas teclas de acceso rápido.
Lebenita
No funciona conmigo en Windows 10 64 bits y Microsoft Office 2016. ¿Pueden ayudarme?
Lucas
1
Esto funciona bien, sin embargo, parece cambiar entre TODAS las ventanas independientemente del escritorio. Estoy usando la vista de tareas ampliamente y necesito saltar a través de las ventanas en el mismo escritorio solamente.
petr
8

Gracias, Erasmose, pero tu versión del script de autohotkey minimizará una ventana si no hay otras ventanas de ese tipo. A veces no lo sabes, y minimizar es una forma molesta de averiguarlo, así que modifiqué tu script de esta manera:

!`::    ; 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, y también cambié la última clase para usar shift en lugar de ctrl ya que ese es el modificador para retroceder con varios otros atajos de teclado. Me encanta autohotkey.

usuario332861
fuente
1
Guay. Actualicé mi código basado en el tuyo y también en los comentarios que recibí en el foro de Autohotkey. El nuevo código no pasará por las ventanas minimizadas, como en Mac.
Seperman
@Seperman, ¿y si también quiero recorrer ventanas minimizadas? ¿Qué tengo que cambiar en tu script para hacer eso?
Ghos3t
Esto funciona bien, excepto que no se comportará correctamente con aplicaciones basadas en Chrome o Chrome / Electron (como VS Code y Slack), ya que se desplaza por todas ellas.
otter.pro
En lugar de usar el nombre de la clase de ventana, usé el nombre del proceso para jugar bien con las aplicaciones basadas en Electron y Firefox / Thunderbird. Script en gist.github.com/snmishra/794c5f41693510c46ba9bedc839696a8
Satya Mishra
7

Algunas aplicaciones que implementan MDI proporcionan Ctrl + Tab para cambiar entre "Documentos" en la misma instancia de aplicación. por ejemplo, MS Office. Pero esta no es una característica de Windows y depende de la aplicación. Para otro software hay diferentes atajos. Por ejemplo, Firefox no proporciona esta función, pero hay un complemento que agrega la funcionalidad.

Además, aquí hay una lista de métodos abreviados de teclado que se proporcionan en Windows.

Además, hay discusiones existentes sobre atajos de teclado en Windows.

Espero que ayude.

Nishant Sharma
fuente
2
Además, algunos programas usan (Ctrl) + (F6) para esto. (Agregue (Shift) a la dirección inversa.)
Scott
5

Easy Windows Switcher de Neosmart hace exactamente lo que buscas.

Aquí está la descripción del sitio web Easy Windows Switcher

Easy Window Switcher hace que cambiar entre diferentes ventanas sea tan fácil como alt+`(eso es alt + backtick) como en una Mac. Olvídese de tener que alt+tababrir entre un millón y uno de ventanas abiertas diferentes para encontrar la que está buscando, con Easy Window Switcher, las pestañas entre ventanas del mismo programa están a solo un alt+`paso.

Ishan
fuente
1
no "siempre" funciona. Si estoy trabajando en una aplicación diferente por algún tiempo, luego vuelvo, deja de funcionar.
Dushyant Bangal
4

VistaSwitcher permite o para esta función. Es compatible con Windows 10 (aunque el nombre sugiere lo contrario). En Windows 8 y versiones posteriores, sugiero agregar ciertas aplicaciones de metro a la lista de exclusión.

La respuesta principal es buena, pero no funciona en configuraciones de monitores múltiples donde la barra de tareas está configurada para mostrar solo iconos en el monitor activo.

Janac Meena
fuente
Win + n funciona en mi sistema W7 con múltiples pantallas y la barra de tareas solo se muestra en el monitor principal: ¿es esto lo que quiso decir o realmente hay una manera de hacer que la barra de tareas cambie al monitor actualmente activo (lo que imagino sería una distracción) ?
Lebenita
1

Además de lo que Scott ( https://superuser.com/users/150988/scott ) compartió:

ctrl+ repeatedly click sobre el icono de la aplicación en la barra de tareas también hará el trabajo.

Néstor Waldyd
fuente
1
(esta respuesta ya la dio otro usuario)
Pete Alvin
1

Con AutoHotkey también, un comportamiento más 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
Christophe Drevet-Droguet
fuente
1

Creé una secuencia de comandos AutoHotkey para cambiar entre las ventanas de la misma aplicación que funcionan con las aplicaciones normales de Windows , los accesos directos de Chrome y las aplicaciones de Chrome .

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

Extra

En ese repositorio de Github hay otro script de AutoHotkey que podría funcionar bien en conjunto con este, porque podrás abrir, restaurar o minimizar tus aplicaciones usando las teclas de acceso rápido que desees.

Ejemplo:

  • 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/")
Juanma Menéndez
fuente
1
Esta es la única respuesta que funciona correctamente en Chrome, ya que no trata las aplicaciones basadas en Chrome y Electron de la misma manera. Funciona perfectamente en Chrome, VS Code, Slack, etc. (En casos raros, no funcionaba correctamente en ciertas aplicaciones como Mintty / Cygwin, gVim y, a veces, en Powershell, si el título de las ventanas cambiaba)
nutria. pro
0

Creé un script AutoHotkey que se integra muy bien con Windows Task Switcher ( Alt+ Tab), brindando todos sus beneficios: vistas previas de ventanas de aplicaciones, clic para seleccionar, navegación con teclas de flecha, solo active la ventana única que desee. Invoque / navegue con Alt+ `y Alt+ Shift+ `(retroceso) para alternar entre ventanas que tengan el mismo nombre de proceso que la ventana actual. Me parece más útil que Win+, numya que funciona para cualquier aplicación (en lugar de tener que recordar el número de ranura fijado), las vistas previas de las ventanas son más grandes, el fondo no se vuelve borroso y se combina a la perfección con la navegación Alt+ Tab. Probado en Windows 10.

El truco principal es ocultar temporalmente las ventanas de aplicaciones que no son de destino de Task Switcher configurando WS_EX_TOOLWINDOWy desarmando WS_EX_APPWINDOW. Para configurar estos estilos de ventanas en ventanas que se ejecutan como administrador, AutoHotkey debe estar firmado o ejecutarse como administrador . Seguí las instrucciones de firma muy fáciles aquí .

Algunos hilos relacionados que contribuyeron:

!`::
{
   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_
}

KrisG
fuente
Ups nuestras ediciones se cruzaron. Traté de volver a juntar a Humpty Dumpty; por favor verifique que su código sea lo que usted quiso decir.
Scott
0

Usando Autohotkey, aquí está mi versión, que funciona con aplicaciones Chrome y Electron. Se modificó a partir de la respuesta de @ user332861 , para que distinga correctamente entre las aplicaciones de Chrome y Electron como Slack y Visual Studio Code. (Para hacer eso, usa en ahk_exelugar 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
otter.pro
fuente
0
!`::
#`::
WinGet, ExeName, ProcessName, A
WinActivateBottom, ahk_exe %ExeName%
return

Simplificado de la respuesta de @ otter.pro. Esto simplemente retrocede a través de las ventanas de la aplicación actual. Avanzar en bicicleta puede hacer que aparezcan breves parpadeos de otras ventanas. Dado que no ver flashes es probablemente más importante que el ciclismo bidireccional, simplemente no pedalees hacia adelante. Además, esta respuesta permite # `como alternativa a!` Ya que esa es la combinación de teclas para el acceso directo de Mac.

cjfp
fuente