本文目录导读:

用脚本批量最小化所有窗口的终极指南
目录导读
- 痛点分析:为什么需要批量最小化窗口?
- 基础知识:脚本控制窗口的底层逻辑
- 实战脚本:Windows + macOS + Linux 三平台脚本详解
- 进阶技巧:一键最小化特定软件、定时最小化、组合快捷键
- 常见问答:脚本执行失败怎么办?如何添加白名单?
- 安全提醒:避免误操作与隐私泄露
痛点分析:为什么需要批量最小化窗口?
现代办公或编程场景中,我们常常同时打开:浏览器(N个标签页)、代码编辑器、终端、聊天软件、PDF阅读器等,当需要快速清理桌面、截屏、演示或切换项目时,逐个点击窗口最小化按钮(尤其是当任务栏堆叠了20+窗口时)会浪费大量时间。批量脚本能实现:
- 一键隐藏所有窗口:适合突然需要展示桌面或保密信息时。
- 按条件选择最小化:最小化所有非工作相关窗口”或“最小化除了当前激活窗口外的所有窗口”。
- 定时自动整理:比如每30分钟自动最小化闲置窗口,提升专注力。
基础知识:脚本控制窗口的底层逻辑
无论是 Windows 的 user32.dll 还是 Linux 的 Xlib,本质都是向操作系统发送“窗口状态变化”指令,核心步骤:
- 枚举所有窗口(获取句柄/ID)。
- 过滤条件(是否可见、是否顶级窗口、是否属于某个进程)。
- 发送最小化消息(通常使用
SW_MINIMIZE或WM_SYSCOMMAND + SC_MINIMIZE)。
不同系统差异:
- Windows:使用 AutoHotkey / PowerShell / VBScript 直接调用 API。
- macOS:借助 AppleScript 或 Hammerspoon 控制
NSWindow。 - Linux:通过
xdotool或wmctrl操作 X11 窗口。
实战脚本:三平台一键批量最小化
Windows:AutoHotkey 极简脚本(推荐)
场景:按 Win+M 最小化所有窗口(类似原生功能),或按 Win+Shift+M 只最小化非激活窗口。
; 保存为 MinimizeAll.ahk,双击运行 ^!m:: ; Ctrl+Alt+M WinMinimizeAll return ; 最小化除当前窗口外的所有窗口 ^!n:: ; Ctrl+Alt+N WinGetActiveTitle, ActiveTitle WinMinimizeAll WinRestore, %ActiveTitle% return ; 最小化特定进程(如所有 Chrome) ^!c:: ; Ctrl+Alt+C WinMinimize, ahk_class Chrome_WidgetWin_1 return
操作说明:AutoHotkey 需安装(约2MB),脚本运行后常驻后台,若想停止,右键托盘图标选“Exit”。
macOS:AppleScript 一行命令
场景:通过 Automator 或终端运行。
-- 最小化所有窗口(Finder 除外)
tell application "System Events"
set allWindows to every window of every process
repeat with processWindows in allWindows
repeat with w in processWindows
if visible of w is true then set miniaturized of w to true
end repeat
end repeat
end tell
替代方案:安装 Hammerspoon 后,使用 Lua 脚本绑定快捷键 cmd+opt+m。
hs.hotkey.bind({"cmd", "alt"}, "M", function()
local apps = hs.application.runningApps()
for _, app in ipairs(apps) do
if app:title() ~= "Finder" then
app:allWindows()[1]:minimize()
end
end
end)
Linux:xdotool 终端命令(通用所有桌面环境)
# 最小化所有窗口(排除当前活动窗口)
ACTIVE=$(xdotool getactivewindow)
xdotool search --onlyvisible --name "" | grep -v "$ACTIVE" | xargs -I{} xdotool windowminimize {}
# 一键保存为 ~/bin/minimize_all.sh,并 chmod +x
依赖安装:sudo apt install xdotool(Ubuntu/Debian)或 sudo pacman -S xdotool(Arch)。
进阶技巧:让脚本更智能
场景1:只最小化非办公软件(指定白名单)
Windows(VBScript):
Set objShell = CreateObject("Shell.Application")
objShell.MinimizeAll
WScript.Sleep 500
' 恢复指定的白名单窗口(例如微信、邮箱)
Set objShellApp = CreateObject("Shell.Application")
objShellApp.Windows.FindWindowW("WeChatMainWndForPC", "").Close? ' 需具体窗口类名
更简单方案:使用 AutoHotkey 的 WinRestore 基于标题或进程恢复。
场景2:定时自动最小化空闲窗口
PowerShell 脚本(Windows 任务计划器调用):
# 每10分钟检查并最小化未被操作超过5分钟的窗口
$inactiveMinutes = 5
$targetProcesses = @("chrome", "notepad++") # 仅检查这些程序
Add-Type @"
using System.Runtime.InteropServices;
[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@
# ... (完整版需扫描 Get-Process 并调用 GetForegroundWindow 对比时间)
macOS:使用 idle_time 命令判断闲置状态。
场景3:快捷键组合一键切换“专注模式”
示例:按 Win+Shift+D 最小化除正在编辑的 Word 之外所有窗口,再按一次恢复原状。
AutoHotkey 实现:
^+d::
WinGetActiveTitle, ActiveTitle
WinMinimizeAll
WinRestore, %ActiveTitle%
; 保存之前的窗口列表到数组(用于恢复)
return
常见问答
Q:脚本执行后,所有窗口包括任务栏/桌面都消失了?
A:正常行为——只最小化应用窗口,任务栏和桌面始终存在,若出现异常,请检查脚本是否误触发了“隐藏所有窗口”(如 SW_HIDE 而非 SW_MINIMIZE),Windows 原生 Win+D 是显示桌面,而非最小化;本文脚本区分了这两种操作。
Q:如何避免某些窗口被最小化(如系统设置、对话框)?
A:在脚本中增加过滤条件:
- Windows:检查窗口是否有
WS_EX_TOOLWINDOW扩展样式(通常为无任务栏图标的工具窗口)。 - 通用:排除标题为空或类名为“Shell_TrayWnd”的窗口。
示例(AutoHotkey):WinGet, list, List, , , Program Manager Loop, %list% { WinGet, exStyle, ExStyle, % "ahk_id " list%A_Index% If (exStyle & 0x80) ; 0x80 是 WS_EX_TOOLWINDOW Continue WinMinimize, % "ahk_id " list%A_Index% }
Q:macOS 上用 AppleScript 最小化后,无法用快捷键恢复?
A:AppleScript 只能最小化,无法批量最大化,建议改用 Hammerspoon,它支持 hs.window.minimize() 和 hs.window.unminimize() 配对。
Q:脚本安全吗?会泄露隐私吗?
A:本地执行的脚本不会联网传输数据,注意:
- 从网上下载的 .vbs / .sh 脚本需先审阅源码再运行。
- 避免在公共电脑上保存含密码的脚本。
- 建议将脚本托管在个人私有仓库(如 GitLab),不公开。
Q:有没有不需要安装软件的方法?
A:
- Windows:按
Win+D显示桌面(非最小化,但可快速整理);或使用自带“任务视图”功能。 - macOS:
Cmd+Opt+H隐藏当前应用以外的窗口(注意是隐藏而非最小化)。 - Linux:多数桌面环境支持
Ctrl+Alt+D切换显示桌面。
安全提醒:避免误操作与隐私泄露
- 测试环境优先:在虚拟机或次要电脑上试验新脚本,尤其是涉及系统句柄遍历的代码。
- 窗口过滤:务必加入白名单/黑名单,防止将关键窗口(如安装向导、未保存文档)误最小化导致数据丢失。
- 快捷键冲突:检查脚本绑定的快捷键是否与系统或现有软件冲突(如
Win+M默认最小化所有窗口,覆盖后需谨慎)。 - 避免无限循环:若脚本中包含自动检查并最小化窗口的逻辑,建议增加计数器和暂停机制(如只运行10次或每小时唤醒一次)。
- 日志记录:生产环境中,打印最小化的窗口标题和时间到日志文件,以便排查异常。
选择适合你的方案
- 轻度用户:直接用系统快捷键
Win+D(Windows)/Cmd+Opt+H(macOS)即可。 - 办公效率控:AutoHotkey 或 Hammerspoon 的定制脚本可满足90%场景。
- 运维/开发者:Linux 下的 xdotool 管道命令更符合命令行习惯。
- 跨平台需求:考虑使用脚本语言(如 Python 调用
pyautogui或win32gui),但需额外库支持。
最后建议:不要把脚本写成“黑魔法”——加注释、分步骤、测试后再启用,批量最小化窗口是效率抓手,但过度自动化可能干扰正常操作,找到适合自己工作流的“整理节奏”,才是真效率。