Windows 7'de, OS X'deki Cmd + `gibi aynı uygulamanın pencereleri arasında geçiş yapmak için kısayol


38

Yalnızca belirli bir uygulamada pencereler arasında geçiş yapmak için Windows 7'de bir kısayol var mı? OS X'deki bu özelliği çok beğendim; Windows'taki karşılığı nedir?



<rant> Keşke Redmond'un UX'e odaklanmasını ve bu soru için olduğu gibi daha fazla Windows tuşu kısayolu eklemesini diliyorum. Bize istemediğimiz şeylerin% 99'unu veriyorlar ama sadece Windows kullanımını kolaylaştırarak hayatımızı kolaylaştırmıyorlar. Sanırım bunun için yeni bir kısayol eklemek iki saatli bir programcının alacağını düşünüyorum. </rant>
Pete Alvin

Yanıtlar:


45

Görev çubuğundaki ilk on uygulamadan biriyse, n'nin konum numarası olan (Win)+ n, onu seçecek ve pencereler arasında geçiş yapacaktır. (Kullanım (sıfır) onuncu uygulaması için.) Örneğin, ben kullanabilirsiniz böylece Windows Gezgini ve Internet Explorer, benim görev çubuğunda ilk iki şey olarak tutturulmuş olması + benim dizinlere arasında geçiş yapmak ve + benim tarayıcılar arasında geçiş yapmak için.012


Bazı tuhaf notlar:

  • Sen ve beklemeye basarsanız ve türünü (ve salınımını) bir rakam nWindows açılacaktır  n görev çubuğunda inci uygulamayı. Tekrar tekrar dokunduğunuzda n yukarıda anlatıldığı gibi programın pencereleri arasında geçiş yapılır. TranslucentCloud tarafından belirtildiği gibi  , daha sonra Shift+ yazarsanız n, bunlar arasında Alt+ Tab ve  Ctrl+ ile olduğu gibi ters sırayla dolaşır Tab.

    Eğer n görev çubuğunda inci uygulama sabitlendi ancak çalışmıyor, daha sonra + nonu başlayacaktır. 

  • Fakat tuşuna basılı tutun eğer veShift, baştan ve sonra yazınnWindows söz konusu uygulamanın yeni bir örneğini başlatmak (ya da en azından bir yeni pencere) olacak zaten çalışıyor olsa bile.   (Bu, Windows Media Player gibi, bazı pencerelerin aynı anda çalışmasına izin vermeyen bazı uygulamalar için başarısız olur.)
  • + n, sayısal tuş takımı ile çalışmıyor gibi görünüyor.

1
Bu, görev çubuğunu genişlettiğiniz çoklu ekran kurulumunda işe yaramıyor gibi görünmüyor
Erfan,

1
Harika. Ve Win + Shift + 1 pencereleri tersten döndürür.
TranslucentCloud

24

Windows 7 ve 8'de, yalnızca klavyeden kullanabileceğim bir kısayol olmamasına rağmen, Ctrlilgilendiğiniz uygulamanın görev çubuğu simgesini tıklatırken basılı tutabilirsiniz . ön plana gel.

Ek olarak, VistaSwitcher programı mevcut uygulamanın pencereleri arasında geçiş yapmak için Win+ F11ve Alt+ ' ayarlar `. (BTW, web sitesi, Windows 8'in desteklenmediğini söylüyor, ancak 8.1 altında şansım oldu; şu ana kadar gördüğüm tek sorun, bazen arama kenar çubuğu gibi şeyleri açık pencereler olarak listelemesi. o, ama YMMV.)


2
BÜYÜK yaşam kalitesi iyileştirme. Özel bir kısayol tuşu daha ideal olsa da, WIN + # çözümü, erişilebilir kısayol tuşları (1-4) ve istenen başlangıç ​​çubuğu konumu arasında çakışma oluşturmasından bahsetmek yerine, anahtar sayısı, zayıf ergonomi ve korkunç bir gecikmeyle ciddi şekilde sınırlandırılmıştır.
bpcookson

1
VistaSwitcher güzeldir. Önerin için teşekkürler.
Dustin Oprea

Ayrıca, Windows 10'daki "Yeni bildirim" ve "Cortana" gibi dışlama listesine de öğeler ekleyebilirsiniz.
dragon788

1
Vista şalter programı seviyorum.
Luke

1
alt-tab terminatorartık aynı uygulama arasında sekme yapma özelliğine sahip olmayan vistaswitcher'ın halefi gibi görünüyor
starcorn

23

AutoHotkey'i kullanabilirsiniz: www.autohotkey.com

Ve bu senaryoyu buraya koy:

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

Benim için çok iyi çalışıyor. Autohotkey'i kullanarak da kopyala / yapıştır / geri al, ... gibi Mac tuşları yaptım. Harika çalışıyor!

Eras


2
Bu, bazı uyarılarla harika çalışır: 1) Chrome için, Slack! 2) Modern uygulamalar için - ve yalnızca bir modern uygulama pencereniz açıksa - rastgele başka bir modern uygulamayı açacaktır (yani, Ajanda açıksa ve tek modern uygulama açıksa, "Ayarlar" ı açacaktır, veya "Spor" veya "Posta" vb.)
Kirk Woll

@KirkWoll Bu doğru. Bunu geliştirmek için kesinlikle yer var. Bunun gerçekleşmesi için gerçekten Autohotkey'ye girmeye vaktim olmadı ...
Seperman

Harika bir iş, hemen kullandı, teşekkürler. Birkaç nokta: değişkendeki WinGet, Listpencerelerin sayısını döndürür List( List%n%tutamaçların saklandığı sahte dizinin tersine ), böylece WinGet, WinClassCountaramayı atlayabilir ve Listbunun yerine kontrol edebilirsiniz . Ayrıca, kod her iki kısayol tuşu için aynı görünüyor.
Lebenita

Windows 10 64bit ve Microsoft Office 2016'da benimle çalışmıyor. Yardımcı olabilir misiniz?
Luke

1
Bu iyi çalışıyor, ancak masaüstünden bağımsız olarak TÜM pencereler arasında geçiş yapıyor gibi görünüyor. Görev görünümünü kapsamlı bir şekilde kullanıyorum ve yalnızca aynı masaüstündeki pencerelerden atlamak istiyorum.
petr

8

Teşekkürler, Erasmose, ancak autohotkey betiği sürümünüz, o türden başka bir pencere yoksa bir pencereyi küçültecektir. Bazen bilmiyorsunuz ve küçültmek öğrenmenin can sıkıcı bir yoludur, bu yüzden komut dosyanızı şu şekilde değiştirdim:

!`::    ; 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, ve ayrıca ctrl yerine shift kullanacak son sınıfı değiştirdim, çünkü diğer birkaç klavye kısayoluyla geriye doğru giden değiştiriciyim. Ben otomatik tuşa basmayı seviyorum.


1
Güzel. Kodumu sizinkine ve ayrıca Autohotkey'nin forumunda aldığım geri bildirimlere göre güncelledim. Yeni kod, Mac'te olduğu gibi simge durumuna küçültülmüş pencereler arasında geçiş yapmaz.
Seperman

@Seperman, küçültülmüş pencereler arasında da dolaşmak istiyorsam. Bunu yapmak için betiğinde neyi değiştirmeliyim?
Ghos3t

Bu, iyi çalışır, ancak Chrome veya Chrome / Elektron tabanlı uygulamalarla (VS Kodu ve Slack gibi) düzgün şekilde davranmaması dışında, hepsi arasında gezinir.
otter.pro

Pencere sınıfı adını kullanmak yerine, Electron tabanlı uygulamalar ve Firefox / Thunderbird ile iyi oynamak için işlem adını kullandım. En Senaryo gist.github.com/snmishra/794c5f41693510c46ba9bedc839696a8
Satya Mishra

7

MDI uygulayan bazı uygulamalar, aynı uygulama örneği altında "Belgeler" arasında geçiş yapmak için Ctrl + Tab sağlar. örneğin, MS Office. Ancak bu bir Windows özelliği değildir ve uygulamaya bağlıdır. Diğer yazılımlar için farklı kısayollar vardır. Örneğin, Firefox bu özelliği sağlamıyor, ancak işlevselliği ekleyen bir eklenti var .

Ayrıca, işte pencerelerde sağlanan klavye kısayollarının bir listesi .

Ayrıca, Windows'ta Klavye kısayolları ile ilgili tartışmalar var.

Umarım yardımcı olur.


2
Ayrıca, bazı programlar bunun için (Ctrl) + (F6) tuşlarını kullanır. (Geri yönüne (Kaydır) ekleyin.)
Scott

5

Neosmart'tan Easy Windows Switcher , tam olarak neyin peşinde olduğunuzu yapıyor.

İşte Easy Windows Switcher Web Sitesinin açıklaması

Easy Window Switcher, farklı pencereler arasında geçiş alt+`yapmayı Mac'teki gibi (alt + backtick) kolaylaştırır . alt+tabAradığınızı bulmak için milyonlarca farklı bir açık pencere arasında olması gerektiğini unutun , Kolay Pencere Değiştirici ile, aynı programın pencereleri arasında sekme yapmak sadece bir alt+`uzağınızda.


1
"her zaman" çalışmıyor. Bir süre farklı bir uygulama üzerinde çalışıyorum, sonra geri gel, çalışma durur.
Dushyant Bangal

4

VistaSwitcher bu özelliğe izin verir veya sağlar. Windows 10 ile uyumludur (adından başka bir şekilde önerilmesine rağmen). Windows 8 ve üzeri sürümlerde, dışlama listesine belirli metro uygulamalarını eklemenizi öneririm.

En iyi cevap iyidir, ancak görev çubuğunun yalnızca etkin monitörde simgeleri gösterecek şekilde ayarlandığı çoklu monitör kurulumlarında çalışmaz.


Win + n W7 sistemimde birden çok ekranla çalışıyor ve görev çubuğu yalnızca ana monitörde gösteriliyor - bu da demek istediğin şey mi, yoksa görev çubuğunun o anki aktif izleyiciye geçiş yapmasının bir yolu var mı (ki bu hayal etmeyi hayal ediyorum) ?
Lebenita


1

AutoHotkey ile daha doğal bir davranış:

; 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

Aynı Windows uygulaması , Chrome Kısayolları ve Chrome Uygulamaları ile çalışan pencereler arasında geçiş yapmak için bir AutoHotkey komut dosyası oluşturdum .

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

Ekstra

Bu Github deposunda , bununla iyi çalışabilecek başka bir AutoHotkey betiği var, çünkü istediğiniz kısayol tuşlarını kullanarak Uygulamalarınızı Açabilir, Geri Yükleyebilir veya Küçültebilirsiniz.

Örnek:

  • 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
Bu, Chrome ve Electron tabanlı uygulamayı aynı şekilde ele almadığı için Chrome'da doğru çalışan tek cevaptır. Chrome, VS Code, Slack, vb. Üzerinde mükemmel çalışıyor (Nadir durumlarda, Mintty / Cygwin, gVim gibi bazı uygulamalarda ve pencerelerin başlığı değiştiyse bazen Powershell'de düzgün şekilde çalışmıyordu)
su samuru. pro

0

Tüm faydalarını sağlayan, Windows Görev Anahtarlayıcısı ( + ) ile iyi bir şekilde bütünleşen bir AutoHotkey komut dosyası oluşturdum : uygulama pencerelerinin önizlemelerini seçin, seçmek için tıklayın, ok tuşuyla gezinme, yalnızca istediğiniz tek pencereyi etkinleştirin. Çağırır / ile gezinmek + ve + + mevcut pencere ile aynı işlem adı sahip pencereler arasında geçiş yapmak için (ters tırnak). Bunu , herhangi bir uygulama için çalıştığından (sabit yuva numarasını hatırlamak yerine) + ' dan daha kullanışlı buluyorum , pencere önizlemeleri daha büyük, arka plan bulanıklaşmıyor ve + gezinti ile sorunsuz bir şekilde karışıyor . Windows 10'da test edilmiştir.AltTabAlt`AltShift`WinnumAltTab

Ana hile, hedef belirlemediğiniz uygulama pencerelerini geçici olarak Görev Değiştirici'den ayarlayarak WS_EX_TOOLWINDOWve ayarlayarak gizlemektir WS_EX_APPWINDOW. Yönetici olarak çalışan pencerelerde bu pencere stillerini ayarlamak için, AutoHotkey'nin imzalanması veya yönetici olarak çalıştırılması gerekir . Buradaki kolay imzalama talimatlarını takip ettim .

Katkıda bulunan bazı ilgili başlıklar:

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


Hata; düzenlemelerimiz geçti. Humpty Dumpty'i tekrar bir araya getirmeye çalıştım; Lütfen kodunuzun ne anlama geldiğini kontrol edin.
Scott

0

Autohotkey kullanarak, Chrome ve Electron uygulamalarıyla çalışan sürümüm. @ User332861 adlı kişinin yanıtından değiştirildi , böylece Slack ve Visual Studio Code gibi Chrome ve Electron uygulamaları arasında doğru bir şekilde ayrım yapıyor. (Bunu yapmak için ahk_exeyerine kullanır 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

@ Otter.pro'nun cevabından basittir. Bu sadece geçerli uygulama pencerelerinde geriye doğru geçiş yapar. İleriye gitmek, diğer pencerelerin kısa süreli yanıp sönmelerinin görünmesine neden olabilir. Flaşları görmemek muhtemelen iki yönlü bisiklet sürmekten daha önemli olduğundan, sadece ileriye doğru dönmeyin. Ayrıca, bu cevap # `a bir alternatif olarak izin verir, çünkü Mac kısayolu için anahtar kombinasyondur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.