Skrót w Windows 7, aby przełączać się między oknami tej samej aplikacji, np. Cmd + `w OS X


38

Czy w systemie Windows 7 jest skrót do przełączania się między oknami tylko w danej aplikacji? Bardzo podoba mi się ta funkcja w OS X; jaki jest jego odpowiednik w systemie Windows?



<rant> Chciałbym, żeby Redmond skupił się na UX i dodał więcej skrótów klawiszowych Windows, jak w przypadku tego pytania. Dają nam 99% rzeczy, których nie chcemy, ale nie tylko ułatwiają nam życie, ułatwiając korzystanie z systemu Windows. Wydaje mi się, że dodanie nowego skrótu zajęłoby młodszemu programistowi dwie godziny. </rant>
Pete Alvin

Odpowiedzi:


45

Jeśli jest to jedna z pierwszych dziesięciu aplikacji na pasku zadań, wówczas (Win)+ n, gdzie n jest numerem pozycji, wybierze ją i przejdzie przez okna. (Użyj 0(zero) dla dziesiątej aplikacji.) Na przykład mam Eksploratora Windows i Internet Explorera przypięte jako dwie pierwsze rzeczy na pasku zadań, więc mogę używać +, 1aby przełączać się między katalogami i +, 2aby przeglądać przeglądarki.


Kilka dziwnych notatek:

  • Jeśli naciśniesz i przytrzymasz oraz wpiszesz (i zwolnisz) cyfrę n, Windows otworzy  n- tą aplikację na pasku zadań. Kilkukrotne stukanie n powoduje przełączanie się między oknami tego programu, jak omówiono powyżej. Jak  stwierdził TranslucentCloud , jeśli następnie wpiszesz Shift+ n, będzie on przechodził przez nie w kolejności odwrotnej, jak w przypadku Alt+ TabCtrl+ Tabitd.

    Jeśli n- ta aplikacja na pasku zadań jest przypięta, ale nie działa, + nją uruchomi. 

  • Ale, jeśli naciśnij i przytrzymaj iShiftod samego początku, a następnie wpisznWindows uruchomi nową instancję (lub przynajmniej nowe okno) z tej aplikacji, nawet jeśli jest już uruchomiony.   (To się nie powiedzie w przypadku niektórych aplikacji, takich jak Windows Media Player, które nie pozwalają na jednoczesne uruchomienie wielu okien.)
  • + nwydaje się nie działać z klawiaturą numeryczną.

1
Wydaje się, że nie działa to w konfiguracji z wieloma ekranami, na której rozszerzasz pasek zadań
Erfan

1
Świetny. A Win + Shift + 1 cyklicznie przechodzi przez okna.
TranslucentCloud,

24

W Windows 7 i 8, chociaż nie znam dostępnego skrótu z samej klawiatury, możesz przytrzymać Ctrl, klikając ikonę paska zadań aplikacji, którą jesteś zainteresowany. Za każdym razem, gdy to zrobisz, pojawi się inne okno należące do tej aplikacji wyjść na pierwszy plan.

Ponadto program VistaSwitcher konfiguruje Win+ F11i Alt+ `do przełączania między oknami bieżącej aplikacji. (BTW, jej strona internetowa mówi, że Windows 8 nie jest obsługiwany, ale miałem szczęście z nim w wersji 8.1; jedynym problemem, jaki do tej pory widziałem, jest to, że czasami wyświetla takie listy, jak pasek boczny wyszukiwania jako otwarte okna. Po prostu ignoruję to, ale YMMV.)


2
OGROMNA poprawa jakości życia. Podczas gdy dedykowany klawisz skrótu byłby bardziej idealny, rozwiązanie WIN + # jest poważnie ograniczone przez liczbę klawiszy, słabą ergonomię i straszne opóźnienie, nie wspominając o tworzeniu konfliktu między dostępnymi klawiszami skrótu (1-4) a pożądaną lokalizacją paska startowego.
bpcookson,

1
VistaSwitcher jest piękny. Dzieki za sugestie.
Dustin Oprea

Możesz także dodawać elementy do listy wykluczeń, takie jak „Nowe powiadomienie” i „Cortana” w systemie Windows 10.
dragon788

1
Uwielbiam program przełączania vista.
Łukasza

1
wygląda na następcę vistaswitchera, którego nazwa alt-tab terminatornie ma już opcji zakładki między tą samą aplikacją
starcorn

23

Możesz użyć AutoHotkey: www.autohotkey.com

I umieść tam ten skrypt:

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

Działa dla mnie bardzo dobrze. Korzystając z Autohotkey, wykonałem także moje klucze kopiuj / wklej / cofnij ... klucze jak Mac. Działa świetnie!

Ery


2
Działa to świetnie z pewnymi zastrzeżeniami: 1) W przypadku Chrome będzie przełączać wszystkie okna podobne do Chrome, w tym aplikacje takie jak Slack! 2) W przypadku nowoczesnych aplikacji - i jeśli masz otwarte tylko jedno okno nowoczesnej aplikacji - otworzy się losowa inna nowoczesna aplikacja (tj. Jeśli masz otwarty Kalendarz i jest to jedyna otwarta nowoczesna aplikacja, otworzy się „Ustawienia”, lub „Sport” lub „Poczta” itp.)
Kirk Woll

@KirkWoll Zgadza się. Zdecydowanie jest miejsce na poprawę. Nie miałem czasu, aby naprawdę zagłębić się w Autohotkey, aby to się stało ...
Seperman,

Świetna robota, wykorzystałem ją od razu, dzięki. Kilka punktów: WinGet, Listzwraca liczbę okien w Listzmiennej (w przeciwieństwie do List%n%pseudoobrazu, w którym przechowywane są uchwyty), dzięki czemu można pominąć WinGet, WinClassCountpołączenie i Listzamiast tego sprawdzić . Ponadto kod wydaje się być identyczny dla obu klawiszy skrótu.
Lebenita,

to nie działa ze mną na Windows 10 64bit i Microsoft Office 2016. możesz pomóc?
Luke

1
Działa to dobrze, jednak wydaje się, że przełącza się między WSZYSTKIMI oknami, niezależnie od pulpitu. Korzystam z widoku zadań i muszę przeskakiwać przez okna tylko na tym samym pulpicie.
petr

8

Dzięki, Erasmose, ale twoja wersja skryptu autohotkey zminimalizuje okno, jeśli nie ma innych okien tego typu. Czasami nie wiesz, a minimalizacja jest denerwującym sposobem na sprawdzenie, więc zmodyfikowałem twój skrypt w następujący sposób:

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

och, a także zmieniłem ostatnią klasę, aby używać shift zamiast ctrl, ponieważ jestem modyfikatorem, aby przejść wstecz z kilkoma innymi skrótami klawiaturowymi. Uwielbiam auto-klucz.


1
Fajne. Zaktualizowałem swój kod na podstawie twojego, a także informację zwrotną na forum Autohotkey. Nowy kod nie będzie przechodził przez zminimalizowane okna, tak jak w Macu.
Seperman

@ Seperman co jeśli chcę również przejść przez zminimalizowane okna. Co muszę zmienić w twoim skrypcie, aby to zrobić.
Ghos3t,

Działa to dobrze, z tym wyjątkiem, że nie będzie działać poprawnie w aplikacjach opartych na Chrome lub Chrome / Electron (takich jak VS Code i Slack), ponieważ przełącza się między nimi.
otter.pro

Zamiast używać nazwy klasy okna, użyłem nazwy procesu, aby grać przyjemnie z aplikacjami opartymi na Electron i Firefox / Thunderbird. Skrypt na gist.github.com/snmishra/794c5f41693510c46ba9bedc839696a8
Satya Mishra

7

Niektóre aplikacje, które implementują MDI, zapewniają klawisze Ctrl + Tab do przełączania „Dokumentów” w tej samej instancji aplikacji. np. MS Office. Ale to nie jest funkcja systemu Windows i zależy od aplikacji. W przypadku innego oprogramowania istnieją różne skróty. np. Firefox nie zapewnia tej funkcji, ale istnieje dodatek, który dodaje tę funkcjonalność.

Ponadto znajduje się lista skrótów klawiaturowych dostępnych w systemie Windows.

Ponadto, istnieje istniejące dyskusje na temat skrótów klawiaturowych w systemie Windows.

Mam nadzieję, że to pomaga.


2
Ponadto niektóre programy używają do tego celu (Ctrl) + (F6). (Dodaj (Shift), aby odwrócić kierunek.)
Scott

5

Easy Windows Switcher od Neosmart robi dokładnie to, czego szukasz.

Oto opis z witryny Easy Windows Switcher

Easy Window Switcher sprawia, że ​​przełączanie między różnymi oknami jest tak proste, jak alt+` (jak Alt + Backtick), jak na komputerze Mac. Zapomnij o alt+tabmilionie i jednym otwartym oknie, aby znaleźć to, czego szukasz, dzięki Easy Window Switcher, tabulacja między oknami tego samego programu jest tylko alt+`daleka.


1
nie zawsze działa. Jeśli pracuję nad inną aplikacją przez jakiś czas, to wróć, przestaje działać.
Dushyant Bangal

4

VistaSwitcher pozwala lub dla tej funkcji. Jest kompatybilny z Windows 10 (choć nazwa sugeruje inaczej). W systemie Windows 8 i nowszych sugeruję dodanie niektórych aplikacji metra do listy wykluczeń.

Najlepsza odpowiedź jest dobra, ale nie działa w konfiguracjach z wieloma monitorami, w których pasek zadań jest ustawiony tak, aby wyświetlać tylko ikony na aktywnym monitorze.


Win + n działa na moim systemie W7 z wieloma ekranami i paskiem zadań wyświetlanym tylko na głównym monitorze - czy to miałeś na myśli, czy naprawdę jest sposób na przełączenie paska zadań na aktualnie aktywny monitor (który, jak sądzę, byłby rozpraszający) ?
Lebenita,


1

Z AutoHotkey również bardziej naturalne zachowanie:

; 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

Utworzyłem skrypt AutoHotkey, aby przełączać się między oknami tej samej aplikacji, które działają ze zwykłymi aplikacjami Windows , skrótami Chrome i aplikacjami Chrome .

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

Dodatkowy

W tym repozytorium Github znajduje się inny skrypt AutoHotkey, który może działać dobrze w tym tandemie, ponieważ będziesz mógł otwierać, przywracać lub minimalizować swoje aplikacje za pomocą skrótów klawiszowych, które chcesz.

Przykład:

  • 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
To jedyna odpowiedź, która działa poprawnie w Chrome, ponieważ nie traktuje Chrome i aplikacji opartych na Electronie tak samo. Działa doskonale w Chrome, VS Code, Slack itp. (W rzadkich przypadkach nie działał poprawnie w niektórych aplikacjach, takich jak Mintty / Cygwin, gVim, a czasem w PowerShell, jeśli tytuł okien został zmieniony)
wydra. pro

0

Stworzyłem skrypt AutoHotkey, który ładnie integruje się z przełącznikiem zadań systemu Windows ( Alt+ Tab), zapewniając wszystkie jego zalety: podgląd okien aplikacji, kliknij, aby wybrać, nawigację za pomocą klawiszy strzałek, aktywuj tylko jedno okno, które chcesz. Wywołaj / nawiguj za pomocą Alt+ `i Alt+ Shift+ `(backtick), aby przełączać się między oknami mającymi taką samą nazwę procesu jak bieżące okno. Uważam, że jest to bardziej użyteczne niż Win+, numponieważ działa w każdej aplikacji (zamiast zapamiętywać przypięty numer gniazda), podglądy okien są większe, tło nie jest rozmyte i płynnie miesza się z Alt+ Tabnawigacją. Testowane w systemie Windows 10.

Główną sztuczką jest tymczasowe ukrywanie okien aplikacji innych niż docelowe w przełączniku zadań przez ustawienie WS_EX_TOOLWINDOWi rozbrojenie WS_EX_APPWINDOW. Aby ustawić te style okien w systemie Windows działającym jako administrator, AutoHotkey musi zostać podpisany lub uruchomiony jako administrator . Postępowałem zgodnie z bardzo łatwymi instrukcjami podpisywania tutaj .

Niektóre powiązane wątki, które przyczyniły się:

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


Ups; nasze zmiany zostały przekreślone. Próbowałem ponownie złożyć Humpty Dumpty; sprawdź, czy Twój kod jest taki, jaki chciałeś.
Scott

0

Korzystając z Autohotkey, oto moja wersja, która działa z aplikacjami Chrome i Electron. Został zmodyfikowany z odpowiedzi @ user332861 , aby poprawnie rozróżniał aplikacje Chrome i Electron, takie jak Slack i Visual Studio Code. (Aby to zrobić, używa ahk_exezamiast 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

Uproszczone z odpowiedzi @ otter.pro. To po prostu przełącza wstecz w bieżących oknach aplikacji. Jazda na rowerze do przodu może powodować pojawienie się krótkich błysków innych okien. Ponieważ niewidoczne błyski są prawdopodobnie ważniejsze niż dwukierunkowe przełączanie, po prostu nie jeździć do przodu. Co więcej, ta odpowiedź umożliwia # `jako alternatywę dla!`, Ponieważ jest to kombinacja klawiszy dla skrótu Mac.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.