Scorciatoia in Windows 7 per passare tra le finestre della stessa applicazione, come Cmd + `in OS X


38

Esiste un collegamento in Windows 7 per passare da una finestra all'altra solo in una determinata applicazione? Mi piace molto questa funzione in OS X; qual è il suo equivalente in Windows?



<rant> Vorrei che Redmond si concentrasse su UX e aggiungesse altre scorciatoie da tastiera di Windows, come per questa domanda. Ci danno il 99% delle cose che non vogliamo, ma non solo ci semplificano la vita rendendo Windows più facile da usare. Immagino che un programmatore junior impiegherebbe tutte e due le ore per aggiungere una nuova scorciatoia per questo. </rant>
Pete Alvin,

Risposte:


45

Se è una delle prime dieci applicazioni sulla barra delle applicazioni, quindi (Win)+ n, dove n è il suo numero di posizione, lo selezionerà e scorrerà tra le finestre. (Usa 0(zero) per la decima applicazione.) Ad esempio, ho Windows Explorer e Internet Explorer bloccati come le prime due cose sulla mia barra delle applicazioni, quindi posso usare + 1per scorrere tra le mie directory e +2 per scorrere tra i miei browser.


Alcune strane note:

  • Se si tiene premuto e il tipo (e rilasciare) una cifra n, Windows aprirà la  n ° applicazione sulla barra delle applicazioni. Toccare ripetutamente scorrerà n le finestre di quel programma, come discusso sopra. Come  affermato da TranslucentCloud , se poi digiti Shift+ n, scorrerà in ordine inverso, come con Alt+ TabCtrl+ Tab, ecc.

    Se il n ° applicazione sulla barra delle applicazioni è bloccato, ma non è in esecuzione, quindi + ninizierà esso. 

  • Ma se si tiene premuto eShift, fin dall'inizio, e quindi si digitan, Windows avvierà una nuova istanza (o almeno una nuova finestra) di quell'applicazione, anche se è già in esecuzione.  (Ciò fallirà per alcune applicazioni, come Windows Media Player, che non consentono l'esecuzione simultanea di più finestre.)
  • + nsembra non funzionare con il tastierino numerico.

1
Questo non sembra funzionare su una configurazione multi schermo in cui estendi la barra delle applicazioni
Erfan,

1
Grande. E Win + Maiusc + 1 scorre ciclicamente le finestre.
TranslucentCloud

24

In Windows 7 e 8, sebbene non ci siano scorciatoie che conosco disponibili solo dalla tastiera, puoi tenere premuto Ctrlfacendo clic sull'icona della barra delle applicazioni dell'app che ti interessa. Ogni volta che lo fai, una finestra diversa appartenente a quell'app venire in prima linea.

Inoltre, il programma VistaSwitcher imposta Win+ F11e Alt+ `per passare tra le finestre dell'app corrente. (A proposito, il suo sito web dice che Windows 8 non è supportato, ma ho avuto fortuna con esso in 8.1; l'unico problema che ho visto finora è che a volte elenca cose come la barra laterale di ricerca come finestre aperte. Ho semplicemente ignorato quello, ma YMMV.)


2
ENORME miglioramento della qualità della vita. Mentre un tasto di scelta rapida dedicato sarebbe più ideale, la soluzione WIN + # è fortemente limitata dal numero di tasti, scarsa ergonomia e un terribile ritardo, per non parlare della creazione di conflitti tra tasti di scelta rapida accessibili (1-4) e posizione desiderata della barra di avvio.
bpcookson,

1
VistaSwitcher è bellissimo. Grazie per il suggerimento
Dustin Oprea,

Puoi anche aggiungere elementi all'elenco di esclusione come "Nuova notifica" e "Cortana" su Windows 10.
dragon788,

1
Adoro il programma Switcher Vista.
Luca,

1
sembra il successore di vistaswitcher, che ha il nome alt-tab terminatornon ha più la funzione di
scorrere

23

È possibile utilizzare AutoHotkey: www.autohotkey.com

E metti questo 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

Funziona molto bene per me. Usando Autohotkey ho anche creato i miei tasti copia / incolla / annulla, ... come Mac. Funziona alla grande!

Eras


2
Funziona benissimo con alcuni avvertimenti: 1) Per Chrome, eseguirà il ciclo di tutte le finestre simili a Chrome, comprese le applicazioni come Slack! 2) Per le app moderne - e se hai solo una finestra per un'app moderna aperta - aprirà un'altra app moderna casuale (cioè se hai Calendar aperto e questa è l'unica app moderna aperta, si aprirà "Impostazioni", o "Sport", o "Posta", ecc.)
Kirk Woll

@KirkWoll Proprio così. C'è sicuramente spazio per migliorarlo. Non ho avuto il tempo di scavare davvero in Autohotkey per farlo accadere ...
Seperman

Ottimo lavoro, l'ho usato subito, grazie. Alcuni punti: WinGet, Listrestituisce il numero di finestre nella Listvariabile (al contrario dello List%n%pseudoarray in cui sono archiviati gli handle), in modo da poter saltare la WinGet, WinClassCountchiamata e verificare Listinvece. Inoltre, il codice sembra essere identico per entrambi i tasti di scelta rapida.
Lebenita,

non funziona con me su Windows 10 a 64 bit e Microsoft Office 2016. puoi aiutarmi?
Luca,

1
Funziona bene, tuttavia, sembra passare tra TUTTE le finestre indipendentemente dal desktop. Sto usando ampiamente la vista delle attività e ho bisogno di saltare attraverso le finestre sullo stesso desktop.
petr

8

Grazie, Erasmose, ma la tua versione dello script autohotkey minimizzerà una finestra se non ci sono altre finestre di quel tipo. A volte non lo sai, e minimizzare è un modo fastidioso per scoprirlo, quindi ho modificato il tuo script in questo modo:

!`::    ; 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, e ho anche cambiato l'ultima classe per usare shift invece di ctrl poiché io sono il modificatore per tornare indietro con molte altre scorciatoie da tastiera. Adoro l'autohotkey.


1
Freddo. Ho aggiornato il mio codice in base al tuo e anche un feedback che ho ricevuto sul forum di Autohotkey. Il nuovo codice non passerà attraverso le finestre ridotte a icona, proprio come in Mac.
Seperman,

@Seperman cosa succede se voglio scorrere anche le finestre ridotte a icona. Cosa devo cambiare nella tua sceneggiatura per farlo.
Ghos3t

Funziona bene, tranne per il fatto che non si comporterà correttamente con le app basate su Chrome o Chrome / Electron (come VS Code e Slack), poiché scorre tutte.
otter.pro

Invece di usare il nome della classe della finestra, ho usato il nome del processo per giocare bene con le app basate su Electron e Firefox / Thunderbird. Script su gist.github.com/snmishra/794c5f41693510c46ba9bedc839696a8
Satya Mishra

7

Alcune applicazioni che implementano MDI forniscono Ctrl + Tab per passare da "Documenti" alla stessa istanza dell'applicazione. ad es. MS Office. Ma questa non è una funzionalità di Windows e dipende dall'applicazione. Per altri software ci sono diverse scorciatoie. ad esempio Firefox non fornisce questa funzione ma è presente un componente aggiuntivo che aggiunge funzionalità.

Inoltre, ecco un elenco di scorciatoie da tastiera fornite in Windows.

Inoltre, ci sono discussioni esistenti sulle scorciatoie da tastiera in Windows.

Spero che sia d'aiuto.


2
Inoltre, alcuni programmi usano (Ctrl) + (F6) per questo. (Aggiungi (Maiusc) alla direzione inversa.)
Scott

5

Easy Windows Switcher di Neosmart fa esattamente quello che cerchi.

Ecco la descrizione dal sito Web Easy Windows Switcher

Easy Window Switcher semplifica il passaggio da una finestra all'altra alt+` (ovvero alt + backtick) come su un Mac. Dimentica di avere alt+tabtra un milione e uno di finestre aperte diverse per trovare quello che stai cercando, con Easy Window Switcher, la tabulazione tra le finestre dello stesso programma è solo alt+`lontana.


1
non "sempre" funziona. Se sto lavorando su un'applicazione diversa per qualche tempo, poi torno, smette di funzionare.
Dushyant Bangal,

4

VistaSwitcher consente o per questa funzione. È compatibile con Windows 10 (anche se il nome suggerisce il contrario). Su Windows 8 e versioni successive, suggerisco di aggiungere alcune app metro all'elenco di esclusione.

La risposta migliore è buona, ma non funziona su configurazioni multi-monitor in cui la barra delle applicazioni è impostata per mostrare solo le icone sul monitor attivo.


Win + n funziona sul mio sistema W7 con più schermi e la barra delle applicazioni mostra solo sul monitor principale - è questo che intendevi o c'è davvero un modo per far passare la barra delle applicazioni al monitor attualmente attivo (che immagino possa essere fonte di distrazione) ?
Lebenita,


1

Anche con AutoHotkey, un comportamento più naturale:

; 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

Ho creato uno script AutoHotkey per passare tra le finestre della stessa applicazione che funzionano con le normali app di Windows , le scorciatoie di Chrome e le app di Chrome .

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

Extra

In quel repository Github c'è un altro script AutoHotkey che potrebbe funzionare bene in tandem con questo, perché sarai in grado di aprire, ripristinare o ridurre a icona le tue app usando i tasti di scelta rapida che desideri.

Esempio:

  • 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/")

1
Questa è l'unica risposta che funziona correttamente su Chrome, poiché non tratta le app basate su Chrome ed Electron allo stesso modo. Funziona perfettamente su Chrome, VS Code, Slack, ecc. (In rari casi, non ha funzionato correttamente su alcune app come Mintty / Cygwin, gVim e talvolta su Powershell, se il titolo di Windows è stato modificato)
lontra. pro

0

Ho creato uno script AutoHotkey che si integra perfettamente con il Task Switcher di Windows ( Alt+ Tab), fornendo tutti i suoi vantaggi: anteprime delle finestre delle app, fare clic per selezionare, navigazione con i tasti freccia, attivare solo la singola finestra desiderata. Richiamare / navigare con Alt+ `e Alt+ Shift+ `(backtick) per scorrere tra le finestre con lo stesso nome di processo della finestra corrente. Trovo questo più utilizzabile di Win+ numin quanto funziona per qualsiasi app (piuttosto che dover ricordare il numero di slot appuntato), le anteprime delle finestre sono più grandi, lo sfondo non si sfoca e si mescola perfettamente con Alt+ Tabnavigazione. Testato su Windows 10.

Il trucco principale è nascondere temporaneamente le finestre delle applicazioni non di destinazione dal Task Switcher impostando WS_EX_TOOLWINDOWe disabilitando WS_EX_APPWINDOW. Per impostare questi stili di Windows su Windows in esecuzione come amministratore, AutoHotkey deve essere firmato o eseguito come amministratore . Ho seguito le istruzioni per la firma molto facili qui .

Alcuni thread correlati che hanno contribuito:

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


oops; le nostre modifiche sono state cancellate. Ho provato a rimettere insieme Humpty Dumpty; controlla che il tuo codice sia quello che volevi dire.
Scott,

0

Usando Autohotkey, ecco la mia versione, che funziona con le app Chrome ed Electron. È stato modificato dalla risposta di @ user332861 , in modo da distinguere correttamente tra le app di Chrome ed Electron come Slack e Visual Studio Code. (Per fare ciò, utilizza ahk_exeinvece di 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

Semplificato dalla risposta di @ otter.pro. Questo semplicemente scorre indietro attraverso le finestre dell'applicazione corrente. Pedalare in avanti può far apparire brevi lampi di altre finestre. Dato che non vedere i flash è probabilmente più importante del ciclismo bidirezionale, semplicemente non andare avanti. Inoltre, questa risposta consente # # in alternativa a! `Poiché questa è la combinazione di tasti per il collegamento Mac.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.