您可以使用AutoHotkey绑定键以最小化所有打开的窗口吗?

时间:2018-07-10 08:44:09

标签: windows autohotkey multiple-monitors

由于某种原因,我已禁用了标准的WIN键快捷方式,因此,例如,我无法调用WIN + M或WIN + D,它们会完成与我想要的操作类似的操作。 < / p>

我想最小化所有监视器上所有打开的窗口。

我已经以多种方式尝试了这一点,其中最明显的似乎是:

#M::
  WinMinimizeAll
  return

但是,这只会最小化主监视器上的窗口,而其他监视器上的窗口不受影响。

我也尝试遍历WinGet之类的所有窗口,但似乎找到的进程实际上并不是GUI窗口,并且也将这些窗口最小化,从而导致任务栏上出现奇怪的灰色框工件,而这些窗口却没有。 t点击。

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

1 个答案:

答案 0 :(得分:1)

如果脚本中没有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
}