Windows 开机自启隐藏托盘
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_0d52066a/windows-tray-startup。
技能介绍
解决什么问题
很多桌面应用并没有提供「开机自启并最小化到托盘」的开关。常见替代方案也不可靠:把 ws.Run 或 .NET 的 ProcessStartInfo 里塞 WindowStyle=Hidden,对 Flutter、Electron 这类自己创建窗口的应用基本无效——窗口句柄在应用启动后才生成,启动时打的标志位早已失去意义。
另一个坑是 PowerShell 的 Add-Type。它需要现场编译 C#,而当环境变量块(尤其是冗长的 PATH)超过 64KB 时会直接失败。这台机器上能跑的命令,换台机器可能莫名其妙报错。
技能如何工作
核心思路是分两层:一个静默的启动器,加上一个持续盯窗口的脚本。
- VBS 启动器放在 shell:startup 目录。它不直接拉起目标应用,而是先延迟 10 秒等待桌面就绪,再用
ws.Run(..., 0, False)无窗口方式调用pythonw.exe。延迟这一步很实际——开机瞬间桌面环境可能还没准备好,过早启动反而会让应用窗口弹出。 - Python 脚本通过
pythonw.exe运行,没有控制台窗口。它用subprocess.Popen拉起目标进程,然后用ctypes.windll.user32直接调用 Win32 API:以EnumWindows配合GetWindowThreadProcessId按 PID 找到属于目标应用的所有窗口,逐个执行ShowWindow(hwnd, 0)(即SW_HIDE)。 - 轮询机制:脚本每 500ms 检查一次,持续 20 秒。这覆盖了启动慢、窗口延迟创建的场景。
关键取舍
SW_HIDE(0)还是SW_MINIMIZE(6):取决于应用有没有系统托盘图标。有托盘图标就用SW_HIDE,窗口彻底隐藏,只留托盘;需要留在任务栏就用SW_MINIMIZE。pythonw还是python:必须是pythonw.exe,否则会闪现一个控制台窗口。- VBS 还是直接在 startup 放 Python:VBS 提供了 10 秒延迟和隐藏启动参数。直接放 Python 路径到 startup,控制台窗口可能一闪而过。
- ctypes 还是 Add-Type:ctypes 随 Python 自带,没有环境块大小限制。
使用场景
- 开发 Electron 桌面工具时,客户要求登录后软件开机自动运行且不弹主窗口,只需右下角托盘图标常驻。
- 维护内部 Flutter 应用,用户反馈开机启动后会短暂弹出窗口再最小化;需要把启动阶段主窗口彻底隐藏。
- 在 Windows 上给团队部署自启脚本,目标机 PATH 很长导致 PowerShell Add-Type 失败,需要改用 Python ctypes 稳定隐藏窗口。
- 希望开机等桌面完全加载后再启动应用,避免登录瞬间主窗口闪出,用 VBS 延迟启动并隐藏。
适合人员
- 桌面应用开发者:需要让 Electron/Flutter 工具开机启动且不打扰用户。
- 企业内部工具维护者:负责把内部 Windows 客户端改成静默自启并保留托盘。
- IT 与运维工程师:要在多台 Windows 机器部署稳定的启动隐藏方案,避开 PowerShell 环境块限制。
- 独立开发者:做常驻托盘的小工具,希望开机自动运行且不弹窗。