Raccourci dans Windows 7 pour basculer entre les fenêtres de la même application, comme Cmd + `sous OS X

38

Existe-t-il un raccourci dans Windows 7 pour basculer entre les fenêtres dans une application donnée uniquement? J'aime beaucoup cette fonctionnalité dans OS X; quel est son équivalent sous Windows?

jiejieup
la source
<rant> J'aimerais que Redmond se concentre sur l'UX et ajoute plus de raccourcis clavier Windows, comme pour cette question. Ils nous donnent 99% de choses que nous ne voulons pas, mais ne nous facilitent pas seulement la vie en rendant Windows plus facile à utiliser. Je suppose qu'il faudrait un programmeur junior toutes les deux heures pour ajouter un nouveau raccourci pour cela. </rant>
Pete Alvin

Réponses:

45

S'il s'agit de l'une des dix premières applications de la barre des tâches, alors (Win)+ n, où n est son numéro de position, la sélectionnera et fera défiler les fenêtres. (Utilisez 0(zéro) pour la dixième application.) Par exemple, j'ai Windows Explorer et Internet Explorer épinglés comme les deux premières choses sur ma barre des tâches, donc je peux utiliser + 1pour parcourir mes répertoires et + 2pour parcourir mes navigateurs.


Quelques notes étranges:

  • Si vous appuyez et maintenez et tapez (et relâchez) un chiffre n, Windows ouvrira la  n ième application dans la barre des tâches. Appuyez plusieurs fois sur n les fenêtres de ce programme, comme indiqué ci-dessus. Comme  indiqué par TranslucentCloud , si vous tapez ensuite Shift+ n, il les parcourra dans l'ordre inverse, comme avec Alt+ Tab et  Ctrl+ Tab, etc.

    Si la n e application de la barre des tâches est épinglée mais ne fonctionne pas, + la nlancera. 

  • Mais, si vous appuyez et maintenez etShift, dès le début, et puis tapezn, Windows démarre une nouvelle instance (ou au moins une nouvelle fenêtre) de cette demande, même si elle est déjà en cours d' exécution.   (Cela échouera pour certaines applications, comme Windows Media Player, qui ne permettent pas à plusieurs fenêtres de s'exécuter simultanément.)
  • + nsemble ne pas fonctionner avec le pavé numérique.
Scott
la source
1
Cela ne semble pas fonctionner sur une configuration multi-écran où vous étendez la barre des tâches
Erfan
1
Génial. Et Win + Shift + 1 parcourt les fenêtres à l'envers.
TranslucentCloud
24

Dans Windows 7 et 8, bien qu'il n'y ait aucun raccourci que je connaisse disponible uniquement à partir du clavier, vous pouvez le maintenir Ctrlen cliquant sur l'icône de la barre des tâches de l'application qui vous intéresse. À chaque fois que vous le faites, une fenêtre différente appartenant à cette application s'affiche venir au premier plan.

De plus, le programme VistaSwitcher configure Win+ F11et Alt+ `pour basculer entre les fenêtres de l'application actuelle. (BTW, son site Web dit que Windows 8 n'est pas pris en charge, mais j'ai eu de la chance avec lui sous 8.1; le seul problème que j'ai vu jusqu'à présent est qu'il répertorie parfois des choses comme la barre latérale de recherche en tant que fenêtres ouvertes. J'ignore simplement cela, mais YMMV.)

echristopherson
la source
2
ÉNORME amélioration de la qualité de vie. Alors qu'un raccourci clavier dédié serait plus idéal, la solution WIN + # est sévèrement limitée par le nombre de clés, une mauvaise ergonomie et un délai terrible, sans parler de la création d'un conflit entre les raccourcis clavier accessibles (1-4) et l'emplacement souhaité de la barre de démarrage.
bpcookson
1
VistaSwitcher est magnifique. Merci pour la suggestion.
Dustin Oprea
Vous pouvez également ajouter des éléments à la liste d'exclusion comme la "Nouvelle notification" et "Cortana" sur Windows 10.
dragon788
1
j'aime le programme vista switcher.
Luke
1
ressemble au successeur de vistaswitcher, qui est nommé alt-tab terminatorn'a plus la fonctionnalité de
tabuler
23

Vous pouvez utiliser AutoHotkey: www.autohotkey.com

Et mettez ce 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

Fonctionne très bien pour moi. En utilisant Autohotkey, j'ai également fait mes copier / coller / annuler, ... touches comme Mac. Fonctionne très bien!

Époques

Seperman
la source
2
Cela fonctionne très bien avec certaines mises en garde: 1) Pour Chrome, il fera défiler toutes les fenêtres de type Chrome, y compris les applications comme Slack! 2) Pour les applications modernes - et si vous n'avez qu'une seule fenêtre d'application moderne ouverte - cela ouvrira une autre application moderne aléatoire (c'est-à-dire si vous avez Calendrier ouvert et que c'est la seule application moderne ouverte, elle ouvrira "Paramètres", ou "Sports", ou "Mail", etc.)
Kirk Woll
@KirkWoll C'est vrai. Il y a certainement de la place pour l'améliorer. Je n'ai pas eu le temps de vraiment creuser dans Autohotkey pour y arriver ...
Seperman
Excellent travail, je l'ai utilisé tout de suite, merci. Quelques points: WinGet, Listrenvoie le nombre de fenêtres dans la Listvariable (par opposition au List%n%pseudo - tableau dans lequel les poignées sont stockées), vous pouvez donc ignorer l' WinGet, WinClassCountappel et vérifier à la Listplace. En outre, le code semble être identique pour les deux raccourcis clavier.
Lebenita
cela ne fonctionne pas avec moi sur Windows 10 64 bits et Microsoft Office 2016. pouvez-vous aider?
Luke
1
Cela fonctionne bien, cependant, il semble basculer entre TOUTES les fenêtres quel que soit le bureau. J'utilise beaucoup la vue des tâches et je dois parcourir les fenêtres sur le même bureau uniquement.
Petr
8

Merci, Erasmose, mais votre version du script autohotkey minimisera une fenêtre s'il n'y a pas d'autres fenêtres de ce type. Parfois, vous ne savez pas, et minimiser est une façon ennuyeuse de le savoir, j'ai donc modifié votre script comme suit:

!`::    ; 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

oh, et j'ai également changé la dernière classe pour utiliser shift au lieu de ctrl car c'est le modificateur pour revenir en arrière avec plusieurs autres raccourcis clavier. J'adore autohotkey.

user332861
la source
1
Cool. J'ai mis à jour mon code en fonction du vôtre et également des commentaires que j'ai reçus sur le forum d'Autohotkey. Le nouveau code ne passera pas en revue les fenêtres réduites comme il est sur Mac.
Seperman
@Seperman et si je veux également parcourir les fenêtres réduites. Que dois-je changer dans votre script pour ce faire.
Ghos3t
Cela fonctionne bien, sauf qu'il ne se comportera pas correctement avec Chrome ou les applications basées sur Chrome / Electron (comme VS Code et Slack), car il passe en revue toutes.
otter.pro
Au lieu d'utiliser le nom de la classe de fenêtre, j'ai utilisé le nom du processus pour bien jouer avec les applications basées sur Electron et Firefox / Thunderbird. Script sur gist.github.com/snmishra/794c5f41693510c46ba9bedc839696a8
Satya Mishra le
7

Certaines applications qui implémentent MDI fournissent Ctrl + Tab pour basculer entre les "Documents" sous la même instance d'application. par exemple MS Office. Mais ce n'est pas une fonctionnalité Windows et dépend de l'application. Pour les autres logiciels, il existe différents raccourcis. Par exemple, Firefox ne fournit pas cette fonctionnalité mais il existe un module complémentaire qui ajoute la fonctionnalité.

De plus, voici une liste des raccourcis clavier fournis dans Windows.

En outre, il existe des discussions sur les raccourcis clavier dans Windows.

J'espère que ça t'as aidé.

Nishant Sharma
la source
2
De plus, certains programmes utilisent (Ctrl) + (F6) pour cela. (Ajouter (Maj) pour inverser la direction.)
Scott
5

Easy Windows Switcher de Neosmart fait exactement ce que vous recherchez.

Voici la description du site Web Easy Windows Switcher

Easy Window Switcher permet de basculer entre différentes fenêtres aussi facilement que alt+`(c'est-à-dire alt + backtick) comme sur un Mac. Oubliez d'avoir à choisir alt+tabentre un million et une fenêtre ouverte différente pour trouver celle que vous recherchez, avec Easy Window Switcher, tabuler entre les fenêtres du même programme n'est qu'à une alt+`distance.

Ishan
la source
1
ne fonctionne pas "toujours". Si je travaille sur une autre application depuis un certain temps, revenez, cela cesse de fonctionner.
Dushyant Bangal
4

VistaSwitcher autorise ou pour cette fonctionnalité. Son compatible avec Windows 10, (bien que le nom suggère le contraire). Sur Windows 8 et versions ultérieures, je suggère d'ajouter certaines applications Metro à la liste d'exclusion.

La première réponse est bonne, mais ne fonctionne pas sur les configurations multi-écrans où la barre des tâches est configurée pour afficher uniquement les icônes sur le moniteur actif.

Janac Meena
la source
Win + n fonctionne sur mon système W7 avec plusieurs écrans et la barre des tâches ne s'affiche que sur le moniteur principal - est-ce ce que vous vouliez dire ou y a-t-il vraiment un moyen de faire basculer la barre des tâches sur le moniteur actuellement actif (ce qui, je suppose, serait distrayant) ?
Lebenita
1

En plus de ce que Scott ( https://superuser.com/users/150988/scott ) a partagé:

ctrl+ repeatedly click sur l'icône de l'application dans la barre des tâches fera également le travail.

Nestor Waldyd
la source
1
(cette réponse a déjà été donnée par un autre utilisateur)
Pete Alvin
1

Avec AutoHotkey aussi, un comportement plus naturel:

; 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
la source
1

J'ai créé un script AutoHotkey pour basculer entre les fenêtres de la même application qui fonctionnent avec les applications Windows standard , les raccourcis Chrome et les applications Chrome .

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

Supplémentaire

Dans ce dépôt Github, il existe un autre script AutoHotkey qui pourrait bien fonctionner en tandem avec celui-ci, car vous pourrez ouvrir, restaurer ou minimiser vos applications en utilisant les raccourcis clavier que vous souhaitez.

Exemple:

  • 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 Menendez
la source
1
C'est la seule réponse qui fonctionne correctement sur Chrome, car elle ne traite pas la même application basée sur Chrome et Electron. Il fonctionne parfaitement sur Chrome, VS Code, Slack, etc. (Dans de rares cas, il ne fonctionnait pas correctement sur certaines applications comme Mintty / Cygwin, gVim et parfois sur Powershell, si le titre des fenêtres était modifié)
loutre. pro
0

J'ai créé un script AutoHotkey qui s'intègre parfaitement à Windows Task Switcher ( Alt+ Tab), offrant tous ses avantages: aperçus des fenêtres d'application, cliquez pour sélectionner, navigation par touches fléchées, activez uniquement la fenêtre unique que vous souhaitez. Appelez / naviguez avec Alt+ `et Alt+ Shift+ `(backtick) pour faire défiler les fenêtres ayant le même nom de processus que la fenêtre actuelle. Je trouve cela plus utilisable que Win+ numcar cela fonctionne pour n'importe quelle application (plutôt que de devoir se souvenir du numéro d'emplacement épinglé), les aperçus des fenêtres sont plus grands, l'arrière-plan n'est pas flou et se mélange parfaitement avec Alt+ Tabnavigation. Testé sur Windows 10.

L'astuce principale consiste à masquer temporairement les fenêtres d'applications non cibles du sélecteur de tâches en définissant WS_EX_TOOLWINDOWet en désactivant WS_EX_APPWINDOW. Pour définir ces styles de fenêtres sur des fenêtres exécutées en tant qu'administrateur, AutoHotkey doit être signé ou exécuté en tant qu'administrateur . J'ai suivi les instructions de signature très faciles ici .

Quelques discussions connexes qui ont contribué:

!`::
{
   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
la source
Oops; nos modifications ont été croisées. J'ai essayé de remettre Humpty Dumpty à nouveau ensemble; veuillez vérifier que votre code est ce que vous vouliez qu'il soit.
Scott
0

En utilisant Autohotkey, voici ma version, qui fonctionne avec les applications Chrome et Electron. Il a été modifié à partir de la réponse de @ user332861 , afin de distinguer correctement les applications Chrome et Electron telles que Slack et Visual Studio Code. (Pour ce faire, il utilise ahk_exeau lieu 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
la source
0
!`::
#`::
WinGet, ExeName, ProcessName, A
WinActivateBottom, ahk_exe %ExeName%
return

Simplifié de la réponse de @ otter.pro. Cela fait simplement défiler les fenêtres d'application en cours. Faire un pas en avant peut faire apparaître de brefs flashs d'autres fenêtres. Étant donné que ne pas voir les flashs est probablement plus important que le cycle bidirectionnel, ne faites pas de cycle vers l'avant. De plus, cette réponse autorise # `comme alternative à!` Puisque c'est la combinaison de touches pour le raccourci Mac.

cjfp
la source