OS X의 Cmd +`와 같은 동일한 응용 프로그램의 창 사이를 전환하는 Windows 7의 바로 가기


37

주어진 응용 프로그램에서만 창 사이를 전환하는 바로 가기가 Windows 7에 있습니까? OS X에서이 기능을 매우 좋아합니다. Windows에서 동등한 것은 무엇입니까?



<rant> Redmond가 UX에 집중하고이 질문과 같은 Windows 키 바로 가기를 더 추가하기를 바랍니다. 그들은 우리에게 원하지 않는 것들의 99 %를 제공하지만 Windows를보다 쉽게 ​​사용할 수있게함으로써 우리의 삶을 더 편하게 만들지는 않습니다. 이것에 대한 새로운 지름길을 추가하는 데 주니어 프로그래머가 두 시간이 걸릴 것이라고 생각합니다. </ rant>
Pete Alvin

답변:


45

그 다음 작업 표시 줄의 처음 10 응용 프로그램 중 하나 인 경우 (Win)+ n, 여기서 n은 위치 번호, 창문을 통해 사이클을 선택합니다. (사용 0(영) 열 번째 응용 프로그램.) 예를 들어, 내가 사용할 수 있도록 Windows 탐색기와 Internet Explorer, 내 작업 표시 줄의 첫 번째 두 가지로 고정이 + 1내 디렉토리를 순환과 + 2내 브라우저를 통해주기에.


이상한 말 :

  • 을 길게 누르고 숫자를 입력 (및 해제)하면 nWindows가 작업 표시 줄 에서 n 번째 응용 프로그램을 엽니 다  . 반복 n 해서 누르면 위에서 설명한대로 해당 프로그램의 창을 순환합니다. 으로  TranslucentCloud으로 언급 하면 다음 입력하면, Shift+를 n, 그것은 의지와 같이 역순으로 순환, Alt+ Tab 및  Ctrl+ Tab

    작업 표시 줄 의 n 번째 응용 프로그램이 고정되었지만 실행되지 않으면 + n가 시작됩니다. 

  • 그러나, 당신은 길게 눌러 경우Shift, 바로 처음부터, 다음 입력n, 윈도우는 해당 응용 프로그램의 새 인스턴스를 시작합니다 (또는 적어도 새 창)됩니다 이미 실행중인 경우에도 마찬가지입니다.   (여러 창을 동시에 실행할 수없는 Windows Media Player와 같은 일부 응용 프로그램의 경우에는 실패합니다.)
  • + n숫자 키패드에서는 작동하지 않는 것 같습니다.

1
작업 표시 줄을 확장하는 다중 화면 설정에서는 작동하지 않는 것 같습니다
Erfan

1
큰. 그리고 Win + Shift + 1은 창을 반대로 순환합니다.
TranslucentCloud

24

Windows 7 및 8에서는 키보드만으로도 사용할 수있는 단축키가 없지만 Ctrl관심있는 앱의 작업 표시 줄 아이콘을 클릭 한 상태로 보류 할 수 있습니다. 이 작업을 수행 할 때마다 해당 앱에 속한 다른 창이 나타납니다. 최전선에 오십시오.

또한 VistaSwitcher 프로그램 은 Win+ F11Alt+ `를 설정 하여 현재 앱의 창 사이를 전환합니다. (BTW의 웹 사이트에 따르면 Windows 8은 지원되지 않지만 8.1에서 운이 좋았습니다. 지금까지 내가 본 유일한 문제는 때로는 검색 사이드 바와 같은 항목을 열린 창으로 나열한다는 것입니다. 하지만 YMMV입니다.)


2
거대한 삶의 질 개선. 전용 핫키가 더 이상적이지만 WIN + # 솔루션은 액세스 가능한 핫키 (1-4)와 원하는 시작 표시 줄 위치 사이에 충돌이 발생하는 것은 말할 것도없고 키의 수, 인체 공학적 문제 및 끔찍한 지연으로 인해 크게 제한됩니다.
bpcookson

1
VistaSwitcher는 아름답습니다. 제안 해 주셔서 감사합니다.
Dustin Oprea

Windows 10의 "새 알림"및 "Cortana"와 같은 제외 목록에 항목을 추가 할 수도 있습니다.
dragon788

1
비스타 스위처 프로그램을 좋아합니다.
Luke

1
비스타 스위처의 후임자 인이 alt-tab terminator프로그램은 더 이상 동일한 응용 프로그램간에 탭 을 지정할 수있는 기능이 없습니다
스타 콘

23

오토 핫키를 사용할 수 있습니다 : www.autohotkey.com

그리고이 스크립트를 거기에 넣으십시오 :

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

나를 위해 아주 잘 작동합니다. Autohotkey를 사용하여 Mac과 같은 복사 / 붙여 넣기 / 실행 취소 키도 만들었습니다. 잘 작동합니다!

시대


2
이것은 몇 가지 경고와 함께 잘 작동합니다. 1) Chrome의 경우 Slack과 같은 응용 프로그램을 포함하여 모든 Chrome과 같은 창을 순환합니다! 2) 최신 앱의 경우-하나의 최신 앱 창이 열려있는 경우 임의의 다른 최신 앱이 열립니다 (예 : 캘린더가 열려 있고 유일한 최신 앱인 경우 "설정") 또는 "스포츠"또는 "우편"등)
Kirk Woll

@KirkWoll 맞습니다. 확실히 개선 할 여지가 있습니다. 오토 핫키를 파고 들어가는 시간이 없었습니다 ...
Seperman

잘 했어, 바로 사용 했어, 고마워 몇 가지 사항 : 변수 WinGet, List가있는 창 수를 반환하므로 List( List%n%핸들이 저장된 의사 배열 과는 달리 ) WinGet, WinClassCount호출을 건너 뛰고 List대신 확인할 수 있습니다 . 또한 코드는 두 핫키 모두에서 동일한 것으로 보입니다.
Lebenita

Windows 10 64bit 및 Microsoft Office 2016에서는 작동하지 않습니다. 도와 줄 수 있습니까?
Luke

1
이것은 잘 작동하지만 데스크톱에 관계없이 모든 창 사이를 전환하는 것 같습니다. 작업보기를 광범위하게 사용하고 있으며 동일한 데스크톱에서만 창을 뛰어 넘어야합니다.
petr

8

고마워, Erasmose, 그러나 해당 유형의 다른 창이없는 경우 자동 핫키 스크립트 버전은 창을 최소화합니다. 때로는 알지 못하고 최소화하는 것이 성가신 방법이므로 스크립트를 다음과 같이 수정했습니다.

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

오, 그리고 다른 클래스 단축키로 뒤로 이동하는 수정 자이므로 ctrl 대신 shift를 사용하도록 마지막 클래스를 변경했습니다. 나는 자동 단축키를 좋아한다.


1
시원한. 귀하의 코드와 Autohotkey의 포럼에서 얻은 의견에 따라 코드를 업데이트했습니다. 새로운 코드는 Mac에서와 같이 최소화 된 창을 반복하지 않습니다.
Seperman

@Seperman 최소화 된 창을 반복하려면 어떻게해야합니까? 이를 위해 스크립트에서 무엇을 변경해야합니까?
Ghos3t

이는 Chrome 또는 Chrome / Electron 기반 앱 (예 : VS Code 및 Slack)에서 모두 순환 할 때 올바르게 작동하지 않는다는 점을 제외하고는 잘 작동합니다.
otter.pro

창 클래스 이름을 사용하는 대신 프로세스 이름을 사용하여 Electron 기반 앱 및 Firefox / Thunderbird와 잘 어울립니다. gist.github.com/snmishra/794c5f41693510c46ba9bedc839696a8
Satya Mishra의

7

MDI를 구현하는 일부 응용 프로그램은 동일한 응용 프로그램 인스턴스에서 "문서"간에 전환하기 위해 Ctrl + Tab을 제공합니다. 예 : MS Office. 그러나 이것은 Windows 기능이 아니며 응용 프로그램에 따라 다릅니다. 다른 소프트웨어의 경우 다른 바로 가기가 있습니다. 예를 들어 Firefox는이 기능을 제공하지 않지만 기능을 추가 하는 애드온 이 있습니다.

또한 다음 은 Windows에서 제공되는 키보드 단축키 목록입니다 .

또한 Windows의 키보드 단축키에 대한 기존 토론 이 있습니다 .

희망이 도움이됩니다.


2
또한 일부 프로그램은이를 위해 (Ctrl) + (F6)을 사용합니다. (방향을
Scott

5

Neosmart의 Easy Windows Switcher 는 사용자가 추구하는 것을 정확하게 수행합니다.

다음은 Easy Windows Switcher 웹 사이트 의 설명입니다.

Easy Window Switcher를 사용 alt+`하면 Mac처럼 쉽게 다른 창 사이를 전환 할 수 있습니다 (alt + backtick). alt+tabEasy Window Switcher를 사용하면 동일한 프로그램의 창 사이를 탭하는 것만으로도 원하는 창을 찾기 위해 백만 대의 다른 열린 창 사이를 잊어 버릴 수 alt+`있습니다.


1
"항상"작동하지 않습니다. 한동안 다른 응용 프로그램에서 작업하고 있다면 돌아와서 작동을 멈 춥니 다.
Dushyant Bangal

4

VistaSwitcher는이 기능을 허용합니다. Windows 10과 호환되지만 이름은 그렇지 않습니다. Windows 8 이상에서는 특정 메트로 앱을 제외 목록에 추가하는 것이 좋습니다.

가장 좋은 대답은 좋지만 작업 표시 줄이 활성 모니터에 아이콘 만 표시하도록 설정된 다중 모니터 설정에서는 작동하지 않습니다.


Win + n은 W7 시스템에서 여러 화면으로 작동하며 작업 표시 줄은 기본 모니터에만 표시됩니다. 이것이 의미하는 바입니까, 아니면 작업 표시 줄을 현재 활성 모니터로 전환하는 방법이 있습니까? ?
Lebenita


1

오토 핫키를 사용하면보다 자연스러운 행동이됩니다.

; 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

AutoHotkey 스크립트를 만들어 일반 Window Apps , Chrome 단축키Chrome Apps에서 작동하는 동일한 응용 프로그램의 창 사이를 전환했습니다 .

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

특별한

점에서 Github에서이 REPO 당신이 열 수 있기 때문에,이 함께 협력하여 잘 작동 복원 또는 원하는 단축키를 사용하여 앱을 최소화 할 수 다른 AutoHotkey에 스크립트가있다.

예:

  • 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
Chrome과 Electron 기반 앱을 동일하게 취급하지 않으므로 Chrome에서 올바르게 작동하는 유일한 답변입니다. 이 (가 Mintty / Cygwin에서, GVIM, 때로는 파워 쉘에, 윈도우의 제목이 변경되었다 경우와 같은 특정 응용 프로그램에서 제대로 순환하지 않았다, 드문 경우에) 등 크롬, VS 코드, 불황기에 완벽하게 작동
수달. 프로

0

앱 작업 미리보기, 클릭하여 선택, 화살표 키 탐색, 원하는 단일 창만 활성화하는 등의 이점을 모두 제공하는 Windows 작업 전환기 ( + ) 와 잘 통합 된 AutoHotkey 스크립트를 만들었습니다 . + 및 + + (백틱)를 사용하여 호출 / 탐색 하여 현재 창과 동일한 프로세스 이름을 가진 창 사이를 순환하십시오. 고정 된 슬롯 번호를 기억하지 않고 모든 응용 프로그램에서 작동 하므로 + 보다 더 유용하다는 것을 알았 습니다. 창 미리보기가 더 크고 배경이 흐려지지 않으며 + 탐색 과 완벽하게 혼합 됩니다. Windows 10에서 테스트되었습니다.AltTabAlt`AltShift`WinnumAltTab

주요 트릭은 설정 WS_EX_TOOLWINDOW및 설정 해제 하여 작업 전환기에서 대상이 아닌 응용 프로그램 창을 일시적으로 숨기는 것 WS_EX_APPWINDOW입니다. 관리자로 실행되는 창에서 이러한 창 스타일을 설정하려면 AutoHotkey에 서명하거나 admin으로 실행해야합니다 . 나는 여기 에서 매우 쉬운 서명 지침을 따랐다 .

기여한 관련 스레드 :

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


죄송합니다. 우리의 편집 내용이 마무리되었습니다. 나는 Humpty Dumpty를 다시 합치려고했습니다. 코드가 의도 한 코드인지 확인하십시오.
스캇

0

Autohotkey를 사용하여 Chrome 및 Electron 앱에서 작동하는 내 버전이 있습니다. @ user332861 의 답변 에서 수정 되어 Slack 및 Visual Studio Code와 같은 Chrome과 Electron 앱을 올바르게 구분합니다. (그렇게하기 위해 ahk_exe대신 사용 합니다 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의 답변에서 단순화되었습니다. 현재 응용 프로그램 창을 거꾸로 순환합니다. 앞으로 자전거를 타면 다른 창이 잠깐 동안 깜박일 수 있습니다. 양방향 사이클링보다 플래시가 보이지 않는 것이 중요하므로 앞으로 사이클링하지 마십시오. 또한이 대답은 #`를!`의 대안으로 허용합니다. Mac 단축키의 주요 조합이기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.