You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Win11toast创建可脚本化通知:按钮功能实现问题求助

解决win11toast通知的两个问题

问题1:「启动备份」按钮用记事本打开脚本而非执行

直接打开.ps1文件会触发系统默认关联程序(记事本),要执行脚本需通过PowerShell主动调用。修改按钮的arguments,指定用PowerShell运行脚本:

# 构造PowerShell执行命令
ps_command = f'powershell.exe -ExecutionPolicy Bypass -File "{ps_script}"'

其中-ExecutionPolicy Bypass用于临时绕过系统执行策略限制(避免因默认策略阻止脚本运行),-File指定要执行的脚本路径。

问题2:仅点击「启动备份」时不执行on_postpone函数

win11toast的toast()函数会返回用户的交互结果:

  • 返回None:用户未点击任何按钮,通知超时消失
  • 返回对应按钮的content值:用户点击了该按钮

通过接收这个返回值,就能精准控制后续逻辑:只有当结果是「Start Backup」时跳过on_postpone,其余情况均执行。

修改后的完整代码

import os
from win11toast import toast

def on_postpone():
    print("Postponed")

print("starting Backup notification")

user_folder = os.path.expanduser("~")  # 补充获取用户目录的代码
ps_script = os.path.join(user_folder, 'Pictures', 'Backup_Starter.ps1')
# 构造PowerShell执行命令
ps_command = f'powershell.exe -ExecutionPolicy Bypass -File "{ps_script}"'

buttons = [
    {'activationType': 'protocol', 'arguments': ps_command, 'content': 'Start Backup'},
    {'activationType': 'protocol', 'arguments': '', 'content': 'Postpone Backup'}
]
    
# 发送通知并接收交互结果
result = toast(
    "Script Ready to Start",
    "Click 'Start Script' to start, or 'Postpone' to postpone the Backup.",
    duration="long",  
    buttons=buttons,
    audio='ms-winsoundevent:Notification.Looping.Alarm'
)

# 根据交互结果判断是否执行推迟逻辑
if result != "Start Backup":
    print("Postponing the script...")
    on_postpone()

关键说明

  1. 执行PowerShell脚本:通过调用powershell.exe并传入参数,确保脚本被执行而非打开
  2. 交互结果判断:利用toast()的返回值,精准控制on_postpone的执行时机,满足「仅点击启动备份时不执行,其余情况均执行」的需求

内容的提问来源于stack exchange,提问作者crazywolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:57:10