Я смотрел на различные решения этого, но ни один не работал.
Как я могу предотвратить Alt+Tab в Windows 10 от переключения на свернутые окна?
Я смотрел на различные решения этого, но ни один не работал.
Как я могу предотвратить Alt+Tab в Windows 10 от переключения на свернутые окна?
Следующий скрипт для 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. Результаты могут отличаться в других системах.
Решение состоит в том, чтобы использовать Alt+Esc
Он переключится на следующее открытое окно, пропуская свернутые окна. Что еще более важно это работает, даже если Windows Shell зависает, и Alt+Tab перестает работать
К сожалению, со всем этим волнением, приложенным к Alt+Tab, еще одна горячая клавиша была упущена из виду. В Windows 2.0 появилась горячая клавиша Alt+Esc . В то время как Alt+Tab позволяет вам выбрать приложение, Alt+Esc позволяет вам переключаться между ними.
Когда вы нажимаете Alt+Esc, активное окно отправляется в конец стека окон, позволяя окну под ним в z-порядке стать новым активным окном. И если следующее окно является свернутым, оно остается свернутым. Хотя это может звучать как раздражение, на самом деле это полезное устройство, поскольку оно позволяет пропускать свернутые приложения без необходимости открывать их.
Я согласен с тем, что предложил @ 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, если вы все еще хотите иметь доступ к этой функции. Вы можете удалить его, если хотите.
Этот скрипт изменяет Alt+Tab на Alt+Escape или Alt+Shift+Escape, изменяя его направление всякий раз, когда вы отпускаете клавишу Alt после переключения окон (то есть также нажатия Tab) хотя бы один раз.
Это не меняет механизм, лежащий в основе Alt+Escape, поэтому, если вы удерживаете Alt и дважды нажимаете клавишу Tab, вы можете не попасть во второе, предшествующее последнему окну, в котором вы были. Также, когда направление "обратное", вы можете получить "старые" окна (окна, которые вы не использовали в течение некоторого времени), прежде чем вы получите последние, за исключением последнего окна, на которое вы переключились; Вы получите это (это единственная причина, по которой я сделал этот переворот в первую очередь).
Ctrl+Alt+Tab по- прежнему сохраняет свою первоначальную функцию - т.е. использует обычный механизм Alt+Tab . Понятия не имею, что вы хотите с этим сделать.
Другой вариант - написать программу, которая может скрыть все свернутые в данный момент окна и восстановить их, затем использовать AutoHotkey, чтобы Alt+Tab активировал эту программу, чтобы скрыть все свернутые окна, прежде чем пропустить Alt+Tab , и затем показать их. снова, когда вы отпускаете Alt после переключения окон (нет необходимости делать это, если вы нажимаете Alt по другим причинам).
Однако это требует больше работы, и это приведет к тому, что ваши открытые приложения на панели задач изменятся при переключении окон и будут отменены при остановке, что может выглядеть странно.
Если вы решите сделать это, я предлагаю вам обратить внимание, чтобы не вызывать программу просто с помощью Alt+Tab, а только при первом нажатии этой комбинации, так как вы удерживали нажатой Alt.
Я использую второй "Виртуальный рабочий стол" для такого типа вещей, он работает очень хорошо.
Вы можете переместить приложения / окна на вторичный / третичный / ... рабочий стол, и на этом рабочем столе будет только это подмножество вкладок (я постоянно пользуюсь alt-tab, так что я вполне зациклен на вашей "проблеме").
Drag-drop работает для быстрого перемещения приложений, и есть другие ярлыки и менеджеры, если вы хотите иметь больше полупостоянных виртуальных рабочих столов для определенных задач.