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


6

我已经看过各种解决方案,但都没有效果。

我该怎么防止 Alt键 + 标签 在Windows 10中切换到最小化的窗口?

Answers:


3

解决方案是使用 Alt键 + 退出

它将切换到下一个打开的窗口,跳过最小化的窗口。更重要的是,即使Windows Shell挂起,它也能正常工作 Alt键 + 标签 停止工作

不幸的是,伴随着所有这些兴奋 Alt键 + 标签 ,另一个热门被可悲地忽略了。 Windows 2.0引入了 Alt键 + 退出 热键。而 Alt键 + 标签 让你选择一个应用程序, Alt键 + 退出 让你循环通过它们。

当你按下 Alt键 + 退出 ,活动窗口被发送到窗口堆栈的底部,允许z-order下面的窗口成为新的活动窗口。如果下一个窗口是最小化窗口,它将保持最小化。虽然这听起来像是一个烦恼,但它实际上是一个有用的设备,因为它可以让您跳过最小化的应用程序,而无需打开它们。

雷蒙德陈讨论了 Alt键 + 标签 Alt键 + 退出 热键


1
问题是我无法使用Alt + Esc在两个窗口之间切换
kofifus

是的,我忘记了Alt-Esc,我倾向于使用Alt-Tab和Alt-Shift-Tab来回移动,这是一种古老的习惯。这个序列适用于两个窗口之间(不幸的是,无论最小化状态如何)。
PeteG

1
@kofifus你可以使用Alt + Esc和Alt + Shift + Esc来回切换。否则你需要一个autohotkey脚本
phuclv

3

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 + Tab吗?怎么样 ?
kofifus

它不会“替换Alt + Tab”。正如我解释的那样,它操纵窗户。您只需使用AutoHotkey v1.1运行该脚本。基本上,安装AutoHotkey,将脚本文本保存为文件 .ahk 扩展名,打开文件。如果可行,请通过任何方法将其添加到系统启动。
Lexikos

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键 + 标签 使用 Alt键 + 逃逸 Alt键 + 转移 + 逃逸 交替,所以你可以来回切换。最后一行是这样的 Alt键 + 逃逸 作为常规的功能 Alt键 + 标签 ,如果您仍想访问该功能。如果需要,您可以将其删除。

注意事项

  1. 这个脚本改变了 Alt键 + 标签 要么是 Alt键 + 逃逸 要么 Alt键 + 转移 + 逃逸 ,每当你释放它时改变它的方向 Alt键 切换窗口后的按键(即也按下了) 标签 ) 至少一次。

    这并没有改变背后的机制 Alt键 + 逃逸 所以,如果你持有 Alt键 并按 标签 两次,你可能没有到达你所在的倒数第二个窗口。当方向被“反转”时,你可能会得到“较旧”的窗户(你有一段时间没有使用过的窗户)你切换到的最后一个窗口除外;你会得到那个(这就是我首先在方向上翻转的全部原因)。

  2. 按Ctrl + Alt键 + 标签 仍然保留其原始功能 - 即它使用常规功能 Alt键 + 标签 机制。不知道你想做什么。

更复杂的替代方案

另一种选择是编写一个程序,可以隐藏所有当前最小化的窗口并恢复它们,然后使用AutoHotkey来制作 Alt键 + 标签 在释放之前激活该程序以隐藏所有最小化的窗口 Alt键 + 标签 通过,然后让你在发布时再次显示它们 Alt键 切换窗户后(如果按下则不需要这样做) Alt键 由于其他原因)。

但是,这需要更多的工作,这将导致您在切换窗口时更改任务栏中的打开应用程序,并在停止时恢复,这可能看起来很奇怪。

如果你选择这样做,我建议你注意不要简单地调用程序 Alt键 + 标签 ,但只是在你按下之后第一次按下那个组合 Alt键


谢谢 !但是使用两个连续的alt + tab在窗口之间来回切换对我来说至关重要。是否可以编写一个涵盖该脚本的脚本?
kofifus

我想你误解了我。我写这个脚本就是为了做到这一点。试一试,亲自看看。
Tomer Godinger

1

我为这类东西使用了第二个“虚拟桌面”,它的效果非常好。
您可以将应用程序/窗口移动到辅助/第三/ ...桌面,并且该桌面将只有该选项卡的子集(我不断使用alt-tab,因此我非常关注您的“问题”)。
拖放适用于快速移动应用程序,如果您希望为特定任务提供更多半永久性虚拟桌面,还有其他快捷方式和管理器。


thx但这不是我想要的
kofifus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.