如何使用BurntToast动态修改Windows通知按钮的标题与参数?
实现BurntToast通知的Pause/Resume按钮切换
要实现点击「Pause」按钮后切换为「Resume」按钮的效果,核心是利用BurntToast的UniqueIdentifier特性——通过同一个唯一ID发送新通知,直接替换掉当前显示的通知。具体实现如下:
核心思路
- 用变量跟踪当前下载状态(暂停/正在下载)
- 注册自定义协议
stackoverflow://,让按钮点击事件能触发PowerShell脚本处理请求 - 根据状态切换按钮的文本和协议参数,用同一个唯一ID重新发送通知替换原有通知
完整代码实现
# 初始化状态与通知唯一ID $isPaused = $false $notificationId = 'example' # 解析协议请求并处理状态切换 if ($args.Count -gt 0) { $action = $args[0] -replace 'stackoverflow://', '' switch ($action) { 'pause' { $isPaused = $true } 'resume' { $isPaused = $false } 'cancel' { Remove-BTNotification -UniqueIdentifier $notificationId exit } } } # 根据当前状态生成对应按钮 if ($isPaused) { $controlButton = New-BTButton -Arguments 'stackoverflow://resume' -Content 'Resume' -ActivationType Protocol $statusText = '已暂停' } else { $controlButton = New-BTButton -Arguments 'stackoverflow://pause' -Content 'Pause' -ActivationType Protocol $statusText = '正在下载...' } $cancelButton = New-BTButton -Arguments 'stackoverflow://cancel' -Content 'Cancel' -ActivationType Protocol # 配置通知数据与进度条 $Data = @{ Line1Data = 'Line 1' Line2Data = 'Line 2' Line3Data = 'Line 3' StatusData = $statusText TitleData = '文件下载中' ValueData = 15/100 # 可替换为实时进度值 } $ProgressBar = New-BTProgressBar -Status 'StatusData' -Title 'TitleData' -Value 'ValueData' # 发送/更新通知(同一ID替换原有通知) New-BurntToastNotification -Button $controlButton, $cancelButton ` -ProgressBar $ProgressBar ` -Text 'Line1Data', 'Line2Data', 'Line3Data' ` -DataBinding $Data ` -UniqueIdentifier $notificationId
协议注册步骤
要让按钮点击能触发脚本,需要在系统注册表中注册stackoverflow://协议:
- 打开注册表编辑器,定位到
HKEY_CLASSES_ROOT\stackoverflow - 设置默认值为
"URL:stackoverflow Protocol",添加名为URL Protocol的字符串值(无需填写内容) - 创建
shell\open\command键,将默认值设为"powershell.exe -File '你的脚本完整路径.ps1' -action %1"
内容的提问来源于stack exchange,提问作者Çağatay KAYA
相关产品推荐
相关产品推荐

