防止 Alt+Tab 切换到最小化窗口

防止 Alt+Tab 切换到最小化窗口

我尝试过多种解决方案但都没有奏效。

如何防止Windows 10 中的Alt+Tab切换到最小化窗口?

答案1

解决方案是使用Alt+Esc

它会切换到下一个打开的窗口,跳过最小化的窗口。更重要的是,即使 Windows Shell 挂断并且Alt+Tab停止工作,它也能正常工作

Alt不幸的是,随着+的流行Tab,另一个热键却被忽视了。Windows 2.0 引入了Alt+Esc热键。Alt+Tab可让您选择一个应用程序,Alt+Esc可让您循环浏览它们。

当您按下Alt+时Esc,活动窗口将被发送到窗口堆栈的底部,从而使其 Z 顺序中位于其下方的窗口成为新的活动窗口。如果下一个窗口是最小化窗口,它将保持最小化状态。虽然这听起来很烦人,但它实际上是一种有用的设备,因为它可以让您跳过最小化的应用程序而无需打开它们。

Raymond Chen 讨论Alt+TabAlt+Esc热键

答案2

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

我同意@LưuVĩnhPhúc 的建议,然后我写了一篇简短的文章自动热键脚本或多或少可以完成这些功能。

剧本

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+EscapeAlt+ Shift+ Escape,以便您可以来回切换。最后一行使Alt+Escape可以用作常规Alt+ Tab,以防您仍想使用该功能。您可以根据需要将其删除。

注意事项

  1. 此脚本将Alt+更改TabAlt+EscapeAlt+ Shift+ ,在切换窗口(即也按下)至少一次后Escape释放该键时,会改变其方向。AltTab

    这不会改变Alt+背后的机制Escape,因此如果您按住Alt并按下Tab两次,您可能无法进入您所在的倒数第二个窗口。此外,当方向“反转”时,您可能会在获得最近的窗口之前获得“较旧的”窗口(您有一段时间没有使用过的窗口),但您切换到的最后一个窗口除外;您将获得那个窗口(这就是我首先进行方向翻转的全部原因)。

  2. Ctrl++AltTab保留其原始功能 - 即它使用常规Alt+Tab机制。不知道你想对此做什么。

更复杂的替代方案

另一种选择是编写一个程序,可以隐藏所有当前最小化的窗口并恢复它们,然后使用 AutoHotkey 使Alt+激活该程序以在让+通过Tab之前隐藏所有最小化的窗口,然后在切换窗口后释放时让它再次显示它们(如果您因其他原因按下,则无需执行此操作)。AltTabAltAlt

然而,这需要更多的工作,并且会导致您在切换窗口时任务栏中打开的应用程序发生变化,并在您停止时恢复,这可能看起来很奇怪。

如果您选择这样做,我建议您注意不要简单地按Alt+来调用程序Tab,而应在按住 之后第一次按下该组合键时调用Alt

答案4

我使用第二个“虚拟桌面”来处理这类事情,效果非常好。
您可以将应用程序/窗口移动到第二/第三/...桌面,并且该桌面将只包含该子集的选项卡(我经常使用Alt+ Tab,因此我非常了解您的“问题”)。

拖放功能可以快速移动应用程序,如果您想为某项任务拥有更多半永久虚拟桌面,还有其他快捷方式和管理器。

相关内容