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

如何用Windows.UI.Notifications API缩短Toast通知屏显时长至7秒内

Windows Toast通知缩短屏幕显示时长实现方案

核心原因

Windows系统原生Toast的屏幕驻留时长默认受系统全局设置约束,用户可在「辅助功能>视觉效果」中调整的最短档位为5秒,没有开放自定义任意时长的原生配置。expiration_time属性仅控制通知从操作中心归档/移除的时间,完全不影响通知在屏幕上的弹出停留时长。

最优实现:定时主动调用Dismiss方法

不需要修改系统设置,也不需要特殊的Toast模板适配,直接在通知展示后启动定时任务,到达指定时长主动调用Toast实例的dismiss()方法强制关闭即可,该方案不受系统全局时长限制,支持自定义任意短的显示时长(比如1秒甚至更短)。
修正后的可运行代码:

from winsdk.windows.ui.notifications import ToastNotificationManager, ToastNotification, ToastTemplateType
import threading
import datetime

def toast_notification(AppID, title, text, display_seconds=1):
    # 加载Toast模板
    toast_xml = ToastNotificationManager.get_template_content(ToastTemplateType.TOAST_TEXT02)
    text_nodes = toast_xml.get_elements_by_tag_name("text")
    text_nodes[0].append_child(toast_xml.create_text_node(title))
    text_nodes[1].append_child(toast_xml.create_text_node(text))
    
    notifier = ToastNotificationManager.create_toast_notifier(AppID)
    toast = ToastNotification(toast_xml)
    # 保留过期时间设置,避免通知残留在操作中心
    toast.expiration_time = datetime.datetime.now() + datetime.timedelta(seconds=display_seconds)
    notifier.show(toast)

    # 定时主动关闭屏幕上的通知
    def auto_dismiss():
        toast.dismiss()
    # 用守护线程执行定时任务,不阻塞主程序退出
    dismiss_timer = threading.Timer(display_seconds, auto_dismiss)
    dismiss_timer.daemon = True
    dismiss_timer.start()

if __name__ == '__main__':
    # 最后一个参数传入想要的屏幕显示时长,单位为秒
    toast_notification('Visual Studio Code', '自定义时长通知', '这条通知只会在屏幕显示1秒', display_seconds=1)

注意事项

  • 不要将Toast的scenario属性设置为alarm、reminder或incomingCall,这类高优先级场景的通知默认会常驻屏幕直到用户交互,会导致自动关闭失效。
  • 定时任务必须设置为守护线程,否则主程序退出时如果定时器还没触发,会导致进程残留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:45:41