6

Я смотрел на различные решения этого, но ни один не работал.

Как я могу предотвратить Alt+Tab в Windows 10 от переключения на свернутые окна?

4 ответа4

4

Следующий скрипт для AutoHotkey v1.1 исправляет эту проблему, обнаруживая, когда какое-либо окно свернуто, и перетягивая его к концу списка alt-tab, временно изменяя стили окна. Сценарий выполняется в фоновом режиме и не требует использования определенной горячей клавиши (или любой горячей клавиши).

; Use a shell hook to detect minimize and fix the alt-tab order.
OnMessage(DllCall("RegisterWindowMessage", "str", "SHELLHOOK"), "ShellHook")
DllCall("RegisterShellHookWindow", "ptr", A_ScriptHwnd)

ShellHook(wParam, lParam)
{
    if (wParam != 0x5) ; HSHELL_GETMINRECT
        return
    hwnd := NumGet(lParam+0)
    WinGet minmax, MinMax, ahk_id %hwnd%
    if (minmax = -1) ; Minimized
    {
        ; Remove the window from the alt-tab list temporarily to force
        ; it to the end of the list.  To do this, temporarily apply the
        ; WS_EX_TOOLWINDOW style and remove WS_EX_APPWINDOW (if present).
        WinGet oldxs, ExStyle, ahk_id %hwnd%
        newxs := (oldxs & ~0x40000) | 0x80
        if (newxs != oldxs)
        {
            WinSet ExStyle, % newxs, ahk_id %hwnd%
            WinSet ExStyle, % oldxs, ahk_id %hwnd%
        }
    }
}

Предостережение: это может оказать неблагоприятное влияние на некоторые окна, поскольку оно изменяет атрибут расширенного стиля окна (временно). Я не заметил никаких проблем во время тестирования.

Я обнаружил, что временное удаление окна из alt-tab переместило его почти в конец списка. Если я сверну несколько окон подряд, первое появится последним, каждое последующее свернутое окно будет вставлено перед остальными (но после всех остальных окон).

Я тестировал на Windows 10 v1709. Результаты могут отличаться в других системах.

3

Решение состоит в том, чтобы использовать Alt+Esc

Он переключится на следующее открытое окно, пропуская свернутые окна. Что еще более важно это работает, даже если Windows Shell зависает, и Alt+Tab перестает работать

К сожалению, со всем этим волнением, приложенным к Alt+Tab, еще одна горячая клавиша была упущена из виду. В Windows 2.0 появилась горячая клавиша Alt+Esc . В то время как Alt+Tab позволяет вам выбрать приложение, Alt+Esc позволяет вам переключаться между ними.

Когда вы нажимаете Alt+Esc, активное окно отправляется в конец стека окон, позволяя окну под ним в z-порядке стать новым активным окном. И если следующее окно является свернутым, оно остается свернутым. Хотя это может звучать как раздражение, на самом деле это полезное устройство, поскольку оно позволяет пропускать свернутые приложения без необходимости открывать их.

Раймонд Чен обсуждает горячие клавиши Alt+Tab и Alt+Esc

2

Я согласен с тем, что предложил @ LưuVĩnhPhúc, и я решил написать короткий скрипт AutoHotkey, который делает это более или менее.

Сценарий

forward := true
cycling := false

~Alt Up::
if cycling
    forward := !forward
cycling := false
return

!Tab::Cycle(forward)
!+Tab::Cycle(!forward)

Cycle(direction)
{
    global cycling
    if direction
    {
        send !{Escape}
    }
    else
    {
        send !+{Escape}
    }
    cycling := true
}

!Escape::!Tab

Установите программу, поместите ее в файл .ahk и запустите. Он установит Alt+Tab, чтобы попеременно использовать Alt+Escape и Alt+Shift+Escape, чтобы вы могли переключаться назад и вперед. В последней строке указывается, что Alt+Escape функционирует как обычная Alt+Tab, если вы все еще хотите иметь доступ к этой функции. Вы можете удалить его, если хотите.

Предостережения

  1. Этот скрипт изменяет Alt+Tab на Alt+Escape или Alt+Shift+Escape, изменяя его направление всякий раз, когда вы отпускаете клавишу Alt после переключения окон (то есть также нажатия Tab) хотя бы один раз.

    Это не меняет механизм, лежащий в основе Alt+Escape, поэтому, если вы удерживаете Alt и дважды нажимаете клавишу Tab, вы можете не попасть во второе, предшествующее последнему окну, в котором вы были. Также, когда направление "обратное", вы можете получить "старые" окна (окна, которые вы не использовали в течение некоторого времени), прежде чем вы получите последние, за исключением последнего окна, на которое вы переключились; Вы получите это (это единственная причина, по которой я сделал этот переворот в первую очередь).

  2. Ctrl+Alt+Tab по- прежнему сохраняет свою первоначальную функцию - т.е. использует обычный механизм Alt+Tab . Понятия не имею, что вы хотите с этим сделать.

Более сложная альтернатива

Другой вариант - написать программу, которая может скрыть все свернутые в данный момент окна и восстановить их, затем использовать AutoHotkey, чтобы Alt+Tab активировал эту программу, чтобы скрыть все свернутые окна, прежде чем пропустить Alt+Tab , и затем показать их. снова, когда вы отпускаете Alt после переключения окон (нет необходимости делать это, если вы нажимаете Alt по другим причинам).

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

Если вы решите сделать это, я предлагаю вам обратить внимание, чтобы не вызывать программу просто с помощью Alt+Tab, а только при первом нажатии этой комбинации, так как вы удерживали нажатой Alt.

1

Я использую второй "Виртуальный рабочий стол" для такого типа вещей, он работает очень хорошо.
Вы можете переместить приложения / окна на вторичный / третичный / ... рабочий стол, и на этом рабочем столе будет только это подмножество вкладок (я постоянно пользуюсь alt-tab, так что я вполне зациклен на вашей "проблеме").
Drag-drop работает для быстрого перемещения приложений, и есть другие ярлыки и менеджеры, если вы хотите иметь больше полупостоянных виртуальных рабочих столов для определенных задач.

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