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()
关键说明
- 执行PowerShell脚本:通过调用
powershell.exe并传入参数,确保脚本被执行而非打开 - 交互结果判断:利用
toast()的返回值,精准控制on_postpone的执行时机,满足「仅点击启动备份时不执行,其余情况均执行」的需求
内容的提问来源于stack exchange,提问作者crazywolf
相关产品推荐
相关产品推荐

