Pintasan di Windows 7 untuk beralih di antara jendela aplikasi yang sama, seperti Cmd + `di OS X


38

Apakah ada jalan pintas di Windows 7 untuk beralih antar windows di aplikasi yang diberikan saja? Saya sangat menyukai fitur ini di OS X; apa yang setara di Windows?



<rant> Saya berharap Redmond akan fokus pada UX dan menambahkan lebih banyak cara pintas kunci Windows, seperti untuk pertanyaan ini. Mereka memberi kita 99% dari hal-hal yang tidak kita inginkan tetapi tidak hanya membuat hidup kita lebih mudah dengan membuat Windows lebih mudah digunakan. Saya kira itu akan memakan waktu dua jam bagi programmer junior untuk menambahkan pintasan baru untuk ini. </rant>
Pete Alvin

Jawaban:


45

Jika itu adalah salah satu dari sepuluh aplikasi pertama pada taskbar, maka (Win)+ n, di mana n adalah nomor posisinya, akan memilihnya dan menggilir melalui jendela. (Gunakan 0(nol) untuk aplikasi kesepuluh.) Misalnya, saya menyematkan Windows Explorer dan Internet Explorer sebagai dua hal pertama di taskbar saya, jadi saya dapat menggunakan + 1untuk menelusuri direktori saya dan + 2untuk menelusuri browser saya.


Beberapa catatan aneh:

  • Jika Anda menekan dan menahan dan mengetik (dan melepaskan) digit n, Windows akan membuka  aplikasi ke- n di taskbar. Mengetuk berulang kali n akan menggilir melalui jendela program itu, seperti dibahas di atas. Seperti yang  dinyatakan oleh TranslucentCloud , jika Anda kemudian mengetik Shift+ n, itu akan menggilirnya dalam urutan terbalik, seperti dengan Alt+ Tab dan  Ctrl+ Tab, dll.

    Jika aplikasi ke- n pada bilah tugas disematkan tetapi tidak berjalan, maka + nakan memulainya. 

  • Tetapi, jika Anda menekan dan menahan danShift, sejak awal, dan kemudian mengetikn, Windows akan memulai contoh baru (atau setidaknya jendela baru) dari aplikasi itu, bahkan jika itu sudah berjalan.   (Ini akan gagal untuk beberapa aplikasi, seperti Windows Media Player, yang tidak memungkinkan beberapa jendela berjalan secara bersamaan.)
  • + ntampaknya tidak berfungsi dengan tombol angka.

1
Ini sepertinya tidak berfungsi pada pengaturan multi-layar tempat Anda memperpanjang bilah tugas
Erfan

1
Besar. Dan Menangkan + Shift + 1 siklus melalui windows secara terbalik.
TranslucentCloud

24

Di Windows 7 dan 8, meskipun tidak ada pintasan yang saya tahu tersedia dari keyboard saja, Anda dapat menahan Ctrlsambil mengklik ikon bilah tugas dari aplikasi yang Anda minati. Setiap kali Anda melakukan ini jendela yang berbeda milik aplikasi itu akan datang ke garis depan.

Selain itu, program VistaSwitcher mengatur Win+ F11dan Alt+ `untuk beralih di antara jendela aplikasi saat ini. (BTW, situs web-nya mengatakan Windows 8 tidak didukung, tapi saya beruntung di bawah 8.1; satu-satunya masalah yang saya lihat sejauh ini adalah bahwa kadang-kadang daftar hal-hal seperti pencarian sidebar sebagai jendela terbuka. Saya hanya mengabaikan itu, tapi YMMV.)


2
Peningkatan kualitas hidup yang BESAR. Sementara hotkey khusus akan lebih ideal, solusi WIN + # sangat dibatasi oleh jumlah kunci, ergonomi yang buruk, dan penundaan yang mengerikan, belum lagi menciptakan konflik antara hotkey yang dapat diakses (1-4) dan lokasi bar awal yang diinginkan.
bpcookson

1
VistaSwitcher itu indah. Terima kasih untuk sarannya.
Dustin Oprea

Anda juga dapat menambahkan item ke daftar pengecualian seperti "Pemberitahuan baru" dan "Cortana" di Windows 10.
dragon788

1
Saya suka program switchista vista.
Luke

1
sepertinya penerus vistaswitcher, yang bernama alt-tab terminatortidak memiliki fitur untuk tab antara aplikasi yang sama lagi
starcorn

23

Anda dapat menggunakan AutoHotkey: www.autohotkey.com

Dan letakkan skrip ini di sana:

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

Bekerja sangat baik untuk saya. Menggunakan Autohotkey, saya juga membuat kunci salin / tempel / undo, ... seperti Mac. Bagus sekali!

Era


2
Ini berfungsi baik dengan beberapa peringatan: 1) Untuk Chrome, ini akan menggilir semua jendela seperti Chrome termasuk aplikasi seperti Slack! 2) Untuk aplikasi modern - dan jika Anda hanya memiliki satu jendela aplikasi modern terbuka - itu akan membuka aplikasi modern acak lainnya (yaitu jika Anda memiliki Kalender terbuka dan itulah satu-satunya aplikasi modern yang terbuka, itu akan membuka "Pengaturan", atau "Olahraga", atau "Surat", dll.)
Kirk Woll

@ KirkWoll Itu benar. Pasti ada ruang untuk memperbaikinya. Saya belum punya waktu untuk benar-benar menggali Autohotkey untuk mewujudkannya ...
Seperman

Kerja bagus, langsung pakai, terima kasih. Beberapa poin: WinGet, Listmengembalikan jumlah jendela dalam Listvariabel (sebagai lawan dari List%n%pseudoarray di mana pegangan disimpan), sehingga Anda dapat melewati WinGet, WinClassCountpanggilan dan memeriksa sebagai Listgantinya. Selain itu, kode ini tampaknya sama untuk kedua hotkey.
Lebenita

itu tidak berfungsi dengan saya di Windows 10 64bit dan Microsoft Office 2016. dapatkah Anda membantu?
Luke

1
Ini bekerja dengan baik, namun, tampaknya beralih di antara SEMUA jendela terlepas dari desktop. Saya menggunakan tampilan tugas secara luas dan perlu melompat melalui windows pada desktop yang sama saja.
petr

8

Terima kasih, Erasmose, tetapi skrip autohotkey versi Anda akan meminimalkan jendela jika tidak ada jendela lain dari jenis itu. Terkadang Anda tidak tahu, dan meminimalkan adalah cara yang menjengkelkan untuk mencari tahu, jadi saya memodifikasi skrip Anda seperti:

!`::    ; 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, dan saya juga mengubah kelas terakhir untuk menggunakan shift daripada ctrl karena saya itulah pengubah untuk mundur dengan beberapa cara pintas keyboard lainnya. Saya suka autohotkey.


1
Keren. Saya memperbarui kode saya berdasarkan milik Anda dan juga umpan balik yang saya dapatkan di forum Autohotkey. Kode baru tidak akan mengulang melalui jendela yang diperkecil seperti di Mac.
Seperman

@Seperman bagaimana jika saya ingin mengulang melalui jendela yang diperkecil juga. Apa yang harus saya ubah dalam skrip Anda untuk melakukan itu.
Ghos3t

Ini berfungsi dengan baik, kecuali bahwa itu tidak akan berlaku dengan benar dengan aplikasi berbasis Chrome atau Chrome / Electron (seperti VS Code dan Slack), karena ia menelusuri semua aplikasi tersebut.
otter.pro

Alih-alih menggunakan nama kelas jendela, saya menggunakan nama proses untuk bermain bagus dengan aplikasi berbasis Elektron dan Firefox / Thunderbird. Script at gist.github.com/snmishra/794c5f41693510c46ba9bedc839696a8
Satya Mishra

7

Beberapa aplikasi yang menerapkan MDI menyediakan Ctrl + Tab untuk beralih antara "Dokumen" di bawah contoh aplikasi yang sama. misalnya MS Office. Tapi ini bukan fitur windows dan tergantung aplikasi. Untuk perangkat lunak lain ada jalan pintas yang berbeda. misal Firefox tidak menyediakan fitur ini tetapi ada add-on yang menambahkan fungsionalitas.

Selain itu, berikut adalah daftar pintasan keyboard yang disediakan di windows.

Juga, ada diskusi yang ada tentang jalan pintas Keyboard di Windows.

Semoga itu bisa membantu.


2
Juga, beberapa program menggunakan (Ctrl) + (F6) untuk ini. (Tambah (Shift) untuk membalikkan arah.)
Scott

5

Easy Windows Switcher dari Neosmart melakukan apa yang Anda cari.

Berikut adalah deskripsi dari Situs Web Easy Windows Switcher

Easy Window Switcher membuat beralih di antara berbagai jendela semudah alt+`(yaitu alt + backtick) seperti pada Mac. Lupakan keharusan alt+tabantara satu juta dan satu jendela terbuka yang berbeda untuk menemukan jendela yang Anda cari, dengan Easy Window Switcher, menabrak antara jendela program yang sama hanya berjarak alt+`jauh.


1
tidak "selalu" berfungsi. Jika saya bekerja pada aplikasi yang berbeda untuk beberapa waktu, lalu kembali, itu berhenti berfungsi.
Dushyant Bangal

4

VistaSwitcher memungkinkan atau untuk fitur ini. Ini kompatibel dengan Windows 10, (meskipun namanya menunjukkan sebaliknya). Pada Windows 8 ke atas, saya sarankan menambahkan aplikasi metro tertentu ke daftar pengecualian.

Jawaban teratas baik, tetapi tidak berfungsi pada pengaturan multi-monitor di mana bilah tugas diatur untuk hanya menampilkan ikon pada monitor aktif.


Win + n berfungsi pada sistem W7 saya dengan beberapa layar dan bilah tugas hanya ditampilkan di monitor utama - apakah ini yang Anda maksudkan atau apakah memang ada cara untuk membuat bilah tugas beralih ke monitor yang saat ini aktif (yang saya bayangkan akan mengganggu) ?
Lebenita


1

Dengan AutoHotkey juga, perilaku yang lebih alami:

; 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

Saya membuat skrip AutoHotkey untuk beralih di antara jendela aplikasi yang sama yang berfungsi dengan Aplikasi Jendela biasa , Pintasan Chrome , dan Aplikasi Chrome .

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

Tambahan

Dalam repo Github itu ada skrip AutoHotkey lain yang dapat bekerja dengan baik bersama dengan yang satu ini, karena Anda akan dapat Membuka, Memulihkan, atau Meminimalkan Aplikasi Anda menggunakan tombol cepat yang Anda inginkan.

Contoh:

  • 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
Ini adalah satu-satunya jawaban yang berfungsi pada Chrome dengan benar, karena tidak memperlakukan aplikasi berbasis Chrome dan Electron sebagai sama. Ini berfungsi dengan baik di Chrome, VS Code, Slack, dll. (Pada kasus yang jarang terjadi, itu tidak siklus dengan benar pada aplikasi tertentu seperti Mintty / Cygwin, gVim, dan kadang-kadang pada Powershell, jika judul windows diubah)
berang. pro

0

Saya membuat skrip AutoHotkey yang terintegrasi dengan baik dengan Windows Task Switcher ( Alt+ Tab), memberikan semua manfaatnya: pratinjau jendela aplikasi, klik untuk memilih, navigasi tombol panah, hanya mengaktifkan satu jendela yang Anda inginkan. Aktifkan / navigasikan dengan Alt+ `dan Alt+ Shift+ `(backtick) untuk menggilir antara jendela yang memiliki nama proses yang sama dengan jendela saat ini. Saya menemukan ini lebih bermanfaat daripada Win+ numkarena berfungsi untuk aplikasi apa pun (daripada harus mengingat nomor slot yang disematkan), pratinjau jendela lebih besar, latar belakangnya tidak kabur, dan bercampur dengan navigasi Alt+ dengan mulus Tab. Diuji pada Windows 10.

Trik utamanya adalah untuk sementara waktu menyembunyikan jendela aplikasi non-target dari Task Switcher dengan mengatur WS_EX_TOOLWINDOWdan membatalkan pengaturan WS_EX_APPWINDOW. Untuk mengatur gaya windows ini pada windows yang berjalan sebagai administrator, AutoHotkey perlu ditandatangani atau dijalankan sebagai admin . Saya mengikuti instruksi penandatanganan yang sangat mudah di sini .

Beberapa utas terkait yang berkontribusi:

!`::
{
   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; hasil edit kami disilangkan. Saya mencoba menyatukan Humpty Dumpty kembali; periksa apakah kode Anda sesuai dengan yang Anda inginkan.
Scott

0

Menggunakan Autohotkey, inilah versi saya, yang berfungsi dengan aplikasi Chrome dan Electron. Itu diubah dari jawaban @ user332861 , sehingga membedakan dengan benar antara aplikasi Chrome dan Electron seperti Slack dan Visual Studio Code. (Untuk melakukan itu, ia menggunakan ahk_exebukan 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

Disederhanakan dari jawaban @ otter.pro. Ini hanya siklus mundur melalui jendela aplikasi saat ini. Bersepeda ke depan dapat menyebabkan kilatan singkat dari jendela lain muncul. Karena tidak melihat kilatan mungkin lebih penting daripada bersepeda dua arah, hanya saja jangan berputar ke depan. Lebih jauh lagi, jawaban ini memungkinkan # `sebagai alternatif!` Karena itulah kombinasi kunci untuk pintasan Mac.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.