Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Window Flash NotifyNew to Visual Studio Code? Get it now.
Window Flash Notify

Window Flash Notify

qqqasdwx

|
39 installs
| (0) | Free
Flash the local Windows VS Code taskbar window from workspace notifications without stealing focus.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Window Flash Notify

中文 | English

Window Flash Notify 让脚本、终端任务、远端构建和测试流程在结束时提醒你:它会闪烁匹配的 Windows VS Code 任务栏按钮,默认不抢占当前焦点。

适用场景:

  • Remote SSH、WSL、Dev Containers、Vagrant 等远端工作区中的长任务提醒
  • 本地或远端 shell hook、构建脚本、测试脚本
  • 多个 VS Code 窗口同时打开时,只提醒任务所在窗口
  • 需要可选声音提示或 Windows toast 通知的自动化流程

功能特性

  • 闪烁匹配的 VS Code 窗口任务栏按钮,默认不打断当前工作。
  • 可选标题提醒:flash 通知会在未聚焦的关联 VS Code 窗口标题中闪烁固定槽位的醒目 ALERT 标记。
  • 支持 flash、focus、none 三种动作。
  • 支持 Windows 系统提示音、自定义 WAV 通知声音和原生 toast 通知。
  • 点击 toast 后会尝试回到发出通知的 VS Code 窗口;关联窗口重新获得焦点时可自动清理本扩展创建的 toast。
  • 支持通过 ${windowFlashNotifyId} 窗口标题变量进行精准单窗口匹配。
  • 支持 VS Code Remote 场景,由 workspace 侧 relay 接收脚本请求,再转发到本地 UI 侧扩展。
  • relay 会向 VS Code 集成终端注入 WINDOW_FLASH_NOTIFY_ENDPOINT,脚本可以直接调用。
  • relay 会把 workspace、remote 标识和当前编辑器信息转换为 UI 端可用于标题匹配的提示。
  • /health 接口会返回 relay 和 UI 扩展版本,便于诊断安装状态。
  • 支持中英文 manifest 与运行时提示本地化。

安装

本项目包含两个扩展:

  • qqqasdwx.vscode-window-flash-notify:UI 端扩展,安装在本地 VS Code。
  • qqqasdwx.vscode-window-flash-notify-relay:workspace 端 relay,安装在脚本实际运行的本地或远端工作区。

推荐先安装 UI 端扩展。UI 端扩展包含 relay 的 extension pack 声明;在远端窗口中,如果 relay 未安装或版本过旧,UI 端扩展会提示安装或更新。安装或更新 relay 后,需要 Reload Window 才能让 relay 激活并注入终端环境变量。

纯本地使用时,两个扩展都可以安装在本地。Remote SSH、WSL、Dev Containers、Vagrant 等场景中,UI 端扩展在本地运行,relay 在远端/workspace 侧运行。

首次使用精准窗口匹配时,UI 端会提示将 ${windowFlashNotifyId} 和 ${windowFlashNotifyAlert} 加入本地 window.title。启用后,每个 relay 窗口会在标题中显示一个短 ID,例如 [WFN:3A7F],通知会优先用这个 ID 精确定位窗口。flash 通知还可以在标题前方显示固定槽位的标题提醒,例如 [██████ ALERT] 和 [░░░░░░ ALERT],避免标题在闪烁过程中反复变长变短。也可以手动运行命令 Window Flash Notify: 启用精准窗口匹配。

快速开始

relay 启动后会向 VS Code 集成终端注入环境变量:

WINDOW_FLASH_NOTIFY_ENDPOINT=http://127.0.0.1:7531/notify

如果当前终端没有该变量,请打开一个新的 VS Code 集成终端。端口被占用时 relay 会尝试后续端口,因此脚本应优先使用环境变量,而不是固定写死 7531。

发送一个空的 POST 请求即可触发默认闪烁:

curl -fsS -X POST "${WINDOW_FLASH_NOTIFY_ENDPOINT:-http://127.0.0.1:7531/notify}"

发送 JSON 请求体可以自定义提示内容和行为:

curl -fsS -X POST "${WINDOW_FLASH_NOTIFY_ENDPOINT:-http://127.0.0.1:7531/notify}" \
  -H 'Content-Type: application/json' \
  --data '{"message":"Task finished","type":"info","action":"flash"}'

查看 relay、UI 扩展版本和当前 endpoint:

endpoint="${WINDOW_FLASH_NOTIFY_ENDPOINT:-http://127.0.0.1:7531/notify}"
curl -fsS "${endpoint%/notify}/health"

脚本示例

下面的示例适合放在构建、测试或部署脚本的结束阶段:

#!/usr/bin/env bash
set -u

cwd="${PWD:-unknown}"
project="$(basename "$cwd")"
endpoint="${WINDOW_FLASH_NOTIFY_ENDPOINT:-http://127.0.0.1:7531/notify}"

curl -fsS --max-time 3 -X POST "$endpoint" \
  -H 'Content-Type: application/json' \
  --data "{\"message\":\"Finished: ${project}\",\"action\":\"flash\"}" \
  >/dev/null || true

带声音和 Windows toast 的示例:

curl -fsS -X POST "${WINDOW_FLASH_NOTIFY_ENDPOINT:-http://127.0.0.1:7531/notify}" \
  -H 'Content-Type: application/json' \
  --data '{"message":"Build finished","type":"info","action":"flash","sound":true,"showToast":true,"toastTimeout":0}'

toastTimeout: 0 表示不设置 toast 过期时间,由 Windows 使用默认行为。

自定义通知声音需要在本地 Windows UI 端配置。运行命令 Window Flash Notify: 选择通知声音,选择一个 .wav 文件后,扩展会复制到自己的存储目录。之后请求中传 sound: true,或开启 windowFlashNotify.soundEnabled,都会优先播放该自定义声音;如果文件不可用,会回退到 Windows 系统提示音。

请求接口

POST /notify 的请求体可以省略。省略时等价于 {},默认执行 flash。

字段 类型 默认值 说明
title string "<workspace> - Window Flash Notify" Windows toast 标题。
message string "Notification received" 通知正文。
type "info" \| "warning" \| "error" "info" 消息级别。未配置自定义声音时,会选择对应的 Windows 系统提示音。
action "flash" \| "focus" \| "none" "flash" 收到请求后的窗口动作。
workspaceName string 当前 VS Code workspace 名称 窗口匹配提示。通常不需要手动传入,relay 会自动补齐。
workspacePath string 当前 workspace 第一个 folder 路径 窗口匹配提示。通常不需要手动传入,relay 会自动补齐。
workspaceHints string[] 根据当前 workspace 自动生成 额外窗口匹配提示。仅在需要覆盖默认匹配行为时使用。
sound boolean windowFlashNotify.soundEnabled 是否播放 Windows 通知声音。配置自定义 WAV 后优先播放自定义声音。
showToast boolean windowFlashNotify.showToast 是否显示 Windows toast 通知。
toastTimeout number windowFlashNotify.toastTimeout Toast 过期时间,单位为秒。设为 0 表示不设置过期时间。

action 可选值:

值 行为
flash 闪烁匹配窗口的任务栏按钮,不抢占焦点。推荐默认值。
focus 将匹配窗口带到前台,会改变当前焦点。
none 不执行窗口动作,只保留可选声音和 toast 行为。

如果设置了 relay 鉴权 token,请在请求中加入 header 或 query 参数:

curl -fsS -X POST "$WINDOW_FLASH_NOTIFY_ENDPOINT" \
  -H 'Content-Type: application/json' \
  -H 'X-Window-Flash-Token: your-token' \
  --data '{"message":"Task finished"}'

设置项

UI 端扩展:

设置 默认值 说明
windowFlashNotify.flashUntilForeground true 持续闪烁任务栏按钮,直到 VS Code 窗口回到前台。
windowFlashNotify.flashCount 8 关闭持续闪烁时请求的闪烁次数。
windowFlashNotify.soundEnabled false 收到请求后默认播放 Windows 通知声音。
windowFlashNotify.customSoundPath "" 可选本地 .wav 文件路径。建议通过“选择通知声音”命令设置。
windowFlashNotify.showToast false 收到请求后默认显示 Windows toast 通知。
windowFlashNotify.toastTimeout 15 Toast 过期时间,单位为秒;设为 0 表示不设置过期时间。
windowFlashNotify.titleAlertEnabled true 当关联 VS Code 窗口未获得焦点时,对 flash 通知同时闪烁窗口标题提醒;需要 window.title 包含 ${windowFlashNotifyAlert}。
windowFlashNotify.titleAlertDuration 10 关闭 windowFlashNotify.flashUntilForeground 时,标题提醒闪烁持续时间,单位为秒。
windowFlashNotify.titleAlertFrames ["[██████ ALERT] ", "[░░░░░░ ALERT] "] 标题提醒闪烁时轮换显示的帧;建议保持各帧视觉宽度接近。
windowFlashNotify.clearToastOnFocus true 关联 VS Code 窗口重新获得焦点时,自动清理本扩展创建的 toast 通知。
windowFlashNotify.autoInstallRelay true 在远端窗口中检测 relay,缺失或过旧时提示安装/更新。
windowFlashNotify.useProcessChainTieBreaker false 仅当多个窗口命中同分标题提示时,使用 Windows 进程链作为辅助决胜。默认关闭;多数窗口共享同一个 VS Code 主进程时帮助有限,并会增加 WMI/CIM 查询开销。
windowFlashNotify.promptWindowTitleId true 当本地 window.title 缺少 ${windowFlashNotifyId} 时,提示启用精准窗口匹配。

Relay 扩展:

设置 默认值 说明
windowFlashNotifyRelay.basePort 7531 relay HTTP 服务首先尝试监听的端口。
windowFlashNotifyRelay.portSearchRange 10 从起始端口开始尝试的端口数量。
windowFlashNotifyRelay.listenHost 127.0.0.1 relay HTTP 服务绑定地址。
windowFlashNotifyRelay.authToken "" 可选鉴权 token;设置后请求必须带 X-Window-Flash-Token header 或 token query 参数。

命令

UI 端扩展:

  • Window Flash Notify: 测试 UI 闪烁:发送一次 UI 端测试闪烁。
  • Window Flash Notify: 诊断 Windows 窗口定位:在输出面板中打印可见 VS Code 窗口、标题提示匹配结果,以及启用时的进程链辅助信息。
  • Window Flash Notify: 在远程窗口安装 Relay:手动检查并安装/更新当前远端窗口中的 relay。
  • Window Flash Notify: 启用精准窗口匹配:将 ${windowFlashNotifyId} 加入本地 window.title,用于按 relay 窗口 ID 精确匹配。
  • Window Flash Notify: 选择通知声音:选择本地 .wav 文件并复制到扩展存储中。
  • Window Flash Notify: 清除通知声音:清除当前自定义通知声音配置。
  • Window Flash Notify: 测试通知声音:播放一次当前配置的通知声音。

Relay 扩展:

  • Window Flash Notify Relay: 复制 Curl 命令:复制当前工作区可用的 curl 示例命令。
  • Window Flash Notify Relay: 测试闪烁:从 relay 侧发送一次测试通知。

平台与限制

  • 窗口闪烁、聚焦、声音和 toast 功能依赖本地 Windows 桌面环境。
  • 非 Windows 本地桌面可以运行 relay endpoint,但不会产生 Windows 任务栏闪烁。
  • focus 会主动改变前台窗口;不希望打断当前工作时请使用默认的 flash。
  • 窗口定位优先使用 relay 生成的 [WFN:xxxx] 标题 ID。该 ID 需要本地 window.title 包含 ${windowFlashNotifyId},标题提醒需要包含 ${windowFlashNotifyAlert};可通过命令 Window Flash Notify: 启用精准窗口匹配 自动写入本地用户设置。
  • 如果标题 ID 不可用,窗口定位会回退到 relay 生成的标题匹配提示,常见来源包括 workspace 名称/路径、Remote SSH/WSL 等 remote 标识、workspace 文件、当前或可见编辑器路径。
  • 只有标题提示能唯一定位窗口时,扩展才会执行闪烁或聚焦;如果多个窗口无法可靠区分,扩展会避免无差别闪烁所有 VS Code 窗口。
  • 进程链匹配默认关闭,只在多个窗口命中同分标题提示时可作为辅助决胜。它适合从不同 VS Code 主进程打开窗口的少数场景;如果多个窗口都汇聚到同一个主进程,通常不会提高准确率,并会增加 WMI/CIM 查询开销。
  • 点击 toast 后会尝试返回原始 VS Code 窗口;Windows 启动协议处理程序可能需要短暂时间。
  • 自动清理 toast 依赖 Windows 通知历史 API;它会按本扩展设置的 tag/group 删除通知历史中的对应 toast,正在显示的横幅通常也会随之消失,但最终表现由 Windows 通知系统决定。

排障

  • 终端里没有 WINDOW_FLASH_NOTIFY_ENDPOINT:确认 relay 已安装并启用,然后打开新的 VS Code 集成终端。
  • /health 不可访问:检查 relay 是否安装在当前 workspace/remote 侧,并确认窗口已 Reload。
  • 没有闪烁:确认本地 VS Code 运行在 Windows 桌面环境,且请求的 action 是 flash。
  • 提醒到了错误窗口:运行 Window Flash Notify: 诊断 Windows 窗口定位,查看输出面板中的窗口匹配结果;尽量避免同时打开多个标题完全相同的 VS Code 窗口。
  • toast 不显示:确认 Windows 通知未被系统策略、专注助手或 VS Code 通知设置屏蔽。

安全

relay 默认只监听 127.0.0.1,用于同一台 workspace 机器上的脚本调用。除非明确需要,请不要把 windowFlashNotifyRelay.listenHost 暴露到外部网络。如果必须暴露,请设置 windowFlashNotifyRelay.authToken 并限制网络访问来源。

许可

MIT

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft