你能用 AutoHotkey 绑定一个键来最小化所有打开的 windows 吗?

Can you bind a key to minimize all open windows with AutoHotkey?

我禁用了标准的 WIN 快捷键是有原因的,所以我不能调用 WIN+M 或 WIN+D 来做类似我想要的事情。

我想最小化所有显示器上的所有打开 windows。

我自己尝试了几种方法,其中最明显的似乎是:

#M::
  WinMinimizeAll
  return

然而,这只会最小化主监视器上的 windows,而其他监视器上的 windows 不受影响。

我也试过遍历从 WinGet 等获得的所有 windows,但它似乎找到了不是真正 GUI windows 的进程并将它们也最小化,导致奇怪任务栏下方的灰色方块不可点击。

这可行吗?如何实现?如果我需要另一个软件来实现它,这也是一个很好的答案。

如果您的脚本中没有 DetectHiddenWindows On,WinGet 是一个不错的选择:

SetWinDelay -1

$F1::MinimizeAll()
$F2::RestoreAll()

MinimizeAll(){
    DetectHiddenWindows Off
    WinGet, id, list
    Loop, %id%
    {
        this_ID := id%A_Index%
        If NOT IsWindow(WinExist("ahk_id" . this_ID))
            continue
        WinGet, WinState, MinMax, ahk_id %this_ID%
        If (WinState = -1)
            continue
        WinGetTitle, title, ahk_id %this_ID%
        If (title = "")
            continue
        WinMinimize, ahk_id %this_ID%
    }
}

RestoreAll(){
    DetectHiddenWindows Off
    WinGet, id, list
    Loop, %id%
    {
        this_ID := id%A_Index%
        If NOT IsWindow(WinExist("ahk_id" . this_ID))
            continue
        WinGet, WinState, MinMax, ahk_id %this_ID%
        If (WinState != -1)
            continue
        WinGetTitle, title, ahk_id %this_ID%
        If (title = "")
            continue
        WinRestore, ahk_id %this_ID%
    }
}

; Check whether the target window is activation target
IsWindow(hWnd){
    WinGet, dwStyle, Style, ahk_id %hWnd%
    if ((dwStyle&0x08000000) || !(dwStyle&0x10000000)) {
        return false
    }
    WinGet, dwExStyle, ExStyle, ahk_id %hWnd%
    if (dwExStyle & 0x00000080) {
        return false
    }
    WinGetClass, szClass, ahk_id %hWnd%
    if (szClass = "TApplication") {
        return false
    }
    return true
}