Phím tắt trong Windows 7 để chuyển giữa các cửa sổ của cùng một ứng dụng, như Cmd + `trong OS X


38

Có một phím tắt trong Windows 7 để chỉ chuyển đổi giữa các cửa sổ trong một ứng dụng nhất định không? Tôi rất thích tính năng này trong OS X; Tương đương của nó trong Windows là gì?



<rant> Tôi ước Redmond sẽ tập trung vào UX và thêm nhiều phím tắt Windows khác, như cho câu hỏi này. Họ cung cấp cho chúng tôi 99% những thứ chúng tôi không muốn nhưng không làm cho cuộc sống của chúng tôi dễ dàng hơn bằng cách làm cho Windows dễ sử dụng hơn. Tôi đoán rằng sẽ mất một lập trình viên cơ sở trong hai giờ để thêm một lối tắt mới cho việc này. </ Rant>
Pete Alvin

Câu trả lời:


45

Nếu nó là một trong mười ứng dụng đầu tiên trên thanh tác vụ, thì (Win)+ n, trong đó n là số vị trí của nó, sẽ chọn nó và quay vòng qua các cửa sổ. (Sử dụng 0(zero) cho ứng dụng thứ mười.) Ví dụ, tôi có Windows Explorer và Internet Explorer được ghim làm hai điều đầu tiên trên thanh tác vụ của tôi, vì vậy tôi có thể sử dụng + 1để lướt qua danh bạ của tôi và + 2để chu kỳ thông qua trình duyệt của mình.


Một số lưu ý kỳ lạ:

  • Nếu bạn nhấn và giữ và nhập (và phát hành) một chữ số n, Windows sẽ mở  ứng dụng thứ n trên thanh tác vụ. Liên tục khai thác n sẽ quay vòng qua các cửa sổ của chương trình đó, như đã thảo luận ở trên. Như được trình  bày bởi TranslucentCloud , nếu bạn nhập Shift+ n, nó sẽ chuyển qua chúng theo thứ tự ngược lại, như với Alt+ Tab và  Ctrl+ Tab, v.v.

    Nếu ứng dụng thứ n trên thanh tác vụ được ghim nhưng không chạy, thì + nsẽ khởi động nó. 

  • Nhưng, nếu bạn nhấn và giữShift, ngay từ đầu, sau đó nhậpn, Windows sẽ bắt đầu một phiên bản mới (hoặc ít nhất là một cửa sổ mới) của ứng dụng đó, ngay cả khi nó đã chạy.   (Điều này sẽ thất bại đối với một số ứng dụng, như Windows Media Player, không cho phép nhiều cửa sổ chạy cùng lúc.)
  • + ndường như không hoạt động với bàn phím số.

1
Điều này dường như không hoạt động trên một thiết lập đa màn hình nơi bạn mở rộng thanh tác vụ
Erfan

1
Tuyệt quá. Và Win + Shift + 1 chu kỳ thông qua các cửa sổ đảo ngược.
translucentCloud

24

Trong Windows 7 và 8, mặc dù không có phím tắt mà tôi biết chỉ có sẵn từ bàn phím, bạn có thể giữ Ctrltrong khi nhấp vào biểu tượng trên thanh tác vụ của ứng dụng mà bạn quan tâm. Mỗi lần bạn làm điều này, một cửa sổ khác thuộc về ứng dụng đó sẽ đi đầu

Ngoài ra, chương trình VistaSwitcher thiết lập Win+ F11Alt+ `để chuyển đổi giữa các cửa sổ của ứng dụng hiện tại. (BTW, trang web của nó cho biết Windows 8 không được hỗ trợ, nhưng tôi đã gặp may mắn với nó dưới 8.1; vấn đề duy nhất tôi thấy cho đến nay là đôi khi nó liệt kê những thứ như thanh bên tìm kiếm dưới dạng cửa sổ đang mở. điều đó, nhưng YMMV.)


2
Chất lượng cuộc sống rất lớn. Mặc dù một phím nóng chuyên dụng sẽ lý tưởng hơn, nhưng giải pháp WIN + # bị giới hạn nghiêm trọng bởi số lượng phím, công thái học kém và độ trễ khủng khiếp, chưa kể đến việc tạo xung đột giữa các phím nóng có thể truy cập (1-4) và vị trí thanh bắt đầu mong muốn.
bpcookson

1
VistaSwitcher rất đẹp. Cám ơn vì sự gợi ý.
Dustin Oprea

Bạn cũng có thể thêm các mục vào danh sách loại trừ như "Thông báo mới" và "Cortana" trên Windows 10.
dragon788

1
Tôi yêu chương trình chuyển đổi vista.
Lu-ca

1
có vẻ như là sự kế thừa cho vistaswitcher, cái tên được đặt tên alt-tab terminatorkhông còn có tính năng tab giữa cùng một ứng dụng nữa
starcorn

23

Bạn có thể sử dụng AutoHotkey: www.autohotkey.com

Và đặt kịch bản này ở đó:

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

Hoạt động rất tốt đối với tôi. Sử dụng Autohotkey, tôi cũng tạo các phím sao chép / dán / hoàn tác, ... như Mac. Hoạt động tuyệt vời!

Thời đại


2
Điều này hoạt động rất tốt với một số cảnh báo: 1) Đối với Chrome, nó sẽ xoay vòng tất cả các cửa sổ giống như Chrome bao gồm các ứng dụng như Slack! 2) Đối với các ứng dụng hiện đại - và nếu bạn chỉ mở một cửa sổ ứng dụng hiện đại - nó sẽ mở một ứng dụng hiện đại khác ngẫu nhiên (nghĩa là nếu bạn mở Lịch và đó là ứng dụng hiện đại duy nhất mở, nó sẽ mở "Cài đặt", hoặc "Thể thao" hoặc "Thư", v.v.)
Kirk Woll

@KirkWoll Đúng vậy. Chắc chắn có chỗ để cải thiện nó. Tôi chưa có thời gian để thực sự tìm hiểu về Autohotkey để biến nó thành hiện thực ...
Seperman

Công việc tuyệt vời, sử dụng nó ngay lập tức, cảm ơn. Một vài điểm: WinGet, Listtrả về số lượng cửa sổ trong Listbiến (trái ngược với List%n%giả hành trong đó các tay cầm được lưu trữ), vì vậy bạn có thể bỏ qua WinGet, WinClassCountcuộc gọi và Listthay vào đó kiểm tra . Ngoài ra, mã dường như giống hệt nhau cho cả hai phím nóng.
Lebenita

nó không hoạt động với tôi trên Windows 10 64bit và Microsoft Office 2016. Bạn có thể giúp gì không?
Lu-ca

1
Điều này hoạt động tốt, tuy nhiên, nó dường như chuyển đổi giữa TẤT CẢ các cửa sổ bất kể máy tính để bàn. Tôi đang sử dụng chế độ xem nhiệm vụ rộng rãi và chỉ cần nhảy qua các cửa sổ trên cùng một máy tính để bàn.
petr

8

Cảm ơn, Erasmose, nhưng phiên bản tập lệnh autohotkey của bạn sẽ thu nhỏ một cửa sổ nếu không có cửa sổ khác thuộc loại đó. Đôi khi bạn không biết và tối thiểu hóa là một cách khó chịu để tìm hiểu, vì vậy tôi đã sửa đổi tập lệnh của bạn như sau:

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

ồ, và tôi cũng đã thay đổi lớp cuối cùng để sử dụng shift thay vì ctrl vì tôi là công cụ sửa đổi để quay ngược với một số phím tắt khác. Tôi yêu autohotkey.


1
Mát mẻ. Tôi đã cập nhật mã của mình dựa trên mã của bạn và cũng là phản hồi tôi nhận được trên diễn đàn của Autohotkey. Mã mới sẽ không lặp qua các cửa sổ được thu nhỏ giống như mã trong Mac.
Seperman

@Seperman nếu tôi muốn lặp qua các cửa sổ thu nhỏ là tốt. Tôi phải thay đổi kịch bản của bạn để làm điều đó.
Ghos3t

Điều này hoạt động tốt, ngoại trừ việc nó sẽ không hoạt động chính xác với các ứng dụng dựa trên Chrome hoặc Chrome / Electron (như VS Code và Slack), khi nó chạy qua tất cả chúng.
rái cá.pro

Thay vì sử dụng tên lớp cửa sổ, tôi đã sử dụng tên quy trình để chơi đẹp với các ứng dụng dựa trên Electron và Firefox / Thunderbird. Kịch bản tại gist.github.com/snmishra/794c5f41693510c46ba9bedc839696a8
Satya Mishra

7

Một số ứng dụng triển khai MDI cung cấp Ctrl + Tab để chuyển giữa "Tài liệu" trong cùng một ứng dụng. vd: MS Office. Nhưng đây không phải là một tính năng của windows và phụ thuộc vào ứng dụng. Đối với các phần mềm khác có các lối tắt khác nhau. ví dụ: Firefox không cung cấp tính năng này nhưng có một tiện ích bổ sung thêm chức năng.

Ngoài ra, đây là danh sách các phím tắt được cung cấp trong windows.

Ngoài ra, có các cuộc thảo luận về bàn phím tắt trong Windows.

Mong rằng sẽ giúp.


2
Ngoài ra, một số chương trình sử dụng (Ctrl) + (F6) cho việc này. (Thêm (Shift) để đảo ngược hướng.)
Scott

5

Windows Switcher dễ dàng từ Neosmart thực hiện chính xác những gì bạn đang theo đuổi.

Dưới đây là mô tả từ trang web Easy Windows Switcher

Easy Window Switcher giúp chuyển đổi giữa các cửa sổ khác nhau dễ dàng như alt+`(đó là alt + backtick) như trên máy Mac. Quên phải có alt+tabmột triệu cửa sổ mở khác nhau để tìm cửa sổ bạn đang tìm, với Easy Window Switcher, việc đặt tab giữa các cửa sổ của cùng một chương trình chỉ là một alt+`cách xa.


1
không "luôn luôn" làm việc. Nếu tôi đang làm việc trên một ứng dụng khác trong một thời gian, sau đó quay lại, nó sẽ ngừng hoạt động.
Bangal Dushyant

4

VistaSwitcher cho phép hoặc cho tính năng này. Nó tương thích với Windows 10, (mặc dù tên cho thấy khác). Trên Windows 8 trở lên, tôi khuyên bạn nên thêm một số ứng dụng metro nhất định vào danh sách loại trừ.

Câu trả lời hàng đầu là tốt, nhưng không hoạt động trên các thiết lập đa màn hình trong đó thanh tác vụ được đặt thành chỉ hiển thị các biểu tượng trên màn hình hoạt động.


Win + n hoạt động trên hệ thống W7 của tôi với nhiều màn hình và thanh tác vụ chỉ hiển thị trên màn hình chính - đây có phải là ý bạn hay thực sự có cách nào để chuyển thanh tác vụ sang màn hình hiện đang hoạt động (mà tôi tưởng tượng sẽ gây mất tập trung) ?
Lebenita


1

Với AutoHotkey cũng vậy, một hành vi tự nhiên hơn:

; 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

Tôi đã tạo tập lệnh AutoHotkey để chuyển đổi giữa các cửa sổ của cùng một ứng dụng hoạt động với Ứng dụng cửa sổ thông thường , Phím tắt ChromeỨng dụng Chrome .

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

Thêm

Trong repo Github đó, có một tập lệnh AutoHotkey khác có thể hoạt động tốt cùng với tập lệnh này, bởi vì bạn sẽ có thể Mở, Khôi phục hoặc Thu nhỏ Ứng dụng của mình bằng các phím nóng bạn muốn.

Thí dụ:

  • 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
Đây là câu trả lời duy nhất hoạt động chính xác trên Chrome, vì nó không coi ứng dụng dựa trên Chrome và Electron là như nhau. Nó hoạt động hoàn hảo trên Chrome, VS Code, Slack, v.v. (Trong những trường hợp hiếm hoi, nó không quay vòng chính xác trên một số ứng dụng nhất định như Mintty / Cygwin, gVim và đôi khi trên Powershell, nếu tiêu đề của windows bị thay đổi)
rái cá. pro

0

Tôi đã tạo một tập lệnh AutoHotkey tích hợp độc đáo với Windows Task Switcher ( Alt+ Tab), cung cấp tất cả các lợi ích của nó: xem trước các cửa sổ ứng dụng, nhấp để chọn, điều hướng phím mũi tên, chỉ kích hoạt cửa sổ duy nhất mà bạn muốn. Gọi / điều hướng bằng Alt+ `Alt+ Shift+ `(backtick) để xoay vòng giữa các cửa sổ có cùng tên quy trình với cửa sổ hiện tại. Tôi thấy điều này có thể sử dụng nhiều hơn Win+ numvì nó hoạt động cho bất kỳ ứng dụng nào (thay vì phải nhớ số vị trí được ghim), xem trước cửa sổ lớn hơn, nền không bị mờ và kết hợp hoàn hảo với Alt+ Tabđiều hướng. Đã thử nghiệm trên Windows 10.

Thủ thuật chính là tạm thời ẩn các cửa sổ ứng dụng không nhắm mục tiêu khỏi Trình chuyển đổi tác vụ bằng cách cài đặt WS_EX_TOOLWINDOWvà bỏ đặt WS_EX_APPWINDOW. Để đặt các kiểu cửa sổ này trên các cửa sổ đang chạy với tư cách quản trị viên, AutoHotkey cần phải được ký hoặc chạy với tư cách quản trị viên . Tôi đã làm theo các hướng dẫn ký rất dễ dàng ở đây .

Một số chủ đề liên quan đã đóng góp:

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


Rất tiếc; chỉnh sửa của chúng tôi đã vượt qua. Tôi đã cố gắng đưa Humpty Dumpty trở lại với nhau một lần nữa; vui lòng kiểm tra xem mã của bạn có đúng như ý của bạn không.
Scott

0

Sử dụng Autohotkey, đây là phiên bản của tôi, hoạt động với ứng dụng Chrome và Electron. Nó đã được sửa đổi từ câu trả lời của @ user332861 , để nó phân biệt chính xác giữa các ứng dụng Chrome và Electron như Slack và Visual Studio Code. (Để làm điều đó, nó sử dụng ahk_exethay vì 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

Đơn giản hóa từ câu trả lời của @ otter.pro. Điều này chỉ đơn giản là chu kỳ ngược thông qua các cửa sổ ứng dụng hiện tại. Đạp xe về phía trước có thể khiến đèn flash ngắn của các cửa sổ khác xuất hiện. Vì không nhìn thấy đèn flash có lẽ quan trọng hơn so với đạp xe hai chiều, chỉ cần không đạp xe về phía trước. Hơn nữa, câu trả lời này cho phép # `thay thế cho!` Vì đó là tổ hợp phím cho phím tắt Mac.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.