32

Есть ли в Windows 7 ярлык для переключения между окнами только в данном приложении? Мне очень нравится эта функция в OS X; каков его эквивалент в Windows?

10 ответов10

42

Если это одно из первых девяти приложений на панели задач, то (Win)+n, где n - номер позиции, выберет его и переключится между окнами.  Например, у меня есть Windows Explorer и Internet Explorer, прикрепленные как первые две вещи на моей панели задач, поэтому я могу использовать +1, чтобы перебрать мои каталоги и +2, чтобы перебрать мои браузеры.

24

В Windows 7 и 8, хотя я не знаю доступных ярлыков на одной только клавиатуре, вы можете удерживать нажатой клавишу Ctrl , щелкая значок на панели задач интересующего вас приложения. Каждый раз, когда вы делаете это, на передний план выходит другое окно, принадлежащее этому приложению.

Кроме того, программа VistaSwitcher устанавливает Win+F11 и Alt+`для переключения между окнами текущего приложения. (Кстати, на его веб-сайте написано, что Windows 8 не поддерживается, но мне повезло с версией 8.1; единственная проблема, которую я видел до сих пор, заключается в том, что иногда она отображает такие вещи, как боковая панель поиска, как открытые окна). Я просто игнорирую это, но YMMV.)

20

Вы можете использовать AutoHotkey: 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. Работает отлично!

Eras

8

Спасибо, Erasmose, но ваша версия скрипта autohotkey свернет окно, если нет других окон этого типа. Иногда вы не знаете, а сворачивание - раздражающий способ выяснить это, поэтому я изменил ваш скрипт так:

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

о, и я также изменил последний класс, чтобы использовать shift вместо ctrl, так как я - это модификатор, чтобы вернуться назад с несколькими другими сочетаниями клавиш. Я люблю автогонки.

7

Некоторые приложения, которые реализуют MDI, предоставляют Ctrl+Tab для переключения между "Документами" в одном экземпляре приложения. например MS Office. Но это не функция Windows, а зависит от приложения. Для других программ существуют разные ярлыки. Например, Firefox не предоставляет эту функцию, но есть дополнение, которое добавляет функциональность.

Кроме того, вот список сочетаний клавиш в Windows.

Также существуют дискуссии о сочетаниях клавиш в Windows.

Надеюсь, это поможет.

4

Easy Windows Switcher от Neosmart делает именно то, что вам нужно.

Вот описание с сайта Easy Windows Switcher

Easy Window Switcher позволяет переключаться между различными окнами так же просто, как alt+` (это alt+backtick), как на Mac. Забудьте о необходимости alt+tab между миллионами и одним открытым окном, чтобы найти то, что вы ищете, с помощью Easy Window Switcher вкладка между окнами одной и той же программы находится всего в Alt +` .

4

VistaSwitcher позволяет или для этой функции. Он совместим с Windows 10 (хотя название предполагает иное). На Windows 8 и выше я предлагаю добавить определенные приложения метро в список исключений.

Верхний ответ - хороший, но он не работает на настройках нескольких мониторов, где на панели задач установлено отображение только значков на активном мониторе.

1

С AutoHotkey тоже более естественное поведение:

; 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

В дополнение к тому, что Скотт (https://superuser.com/users/150988/scott) поделился:

Ctrl+несколько раз нажмите на значок приложения на панели задач и также сделает эту работу.

0

Я создал скрипт AutoHotkey, который прекрасно интегрируется с Windows Task Switcher (Alt+Tab), предоставляя все его преимущества: предварительный просмотр окон приложения, щелчок, чтобы выбрать, навигация по клавишам со стрелками, активировать только одно окно, которое вы хотите. Вызывайте / перемещайтесь с помощью Alt+` и Alt+Shift+` (backtick), чтобы переключаться между окнами, имеющими то же имя процесса, что и текущее окно. Я считаю, что это более удобно, чем Win+num, так как оно работает для любого приложения (вместо того, чтобы запоминать номер закрепленного слота), превью окна больше, фон не размыт и плавно смешивается с навигацией Alt+Tab . Проверено на Windows 10.

Основная хитрость заключается в том, чтобы временно скрыть окна нецелевых приложений от переключателя задач, установив WS_EX_TOOLWINDOW и WS_EX_APPWINDOW . Чтобы установить эти стили окон в окнах, работающих от имени администратора, AutoHotkey должен быть подписан или запущен от имени администратора . Я следовал очень простым инструкциям по подписанию здесь .

Некоторые связанные темы, которые внесли свой вклад:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .