如何在Windows 10中捕获或检测其他进程发送的Toast通知?
在Windows 10中捕获/检测其他进程的Toast通知
嘿,这个问题问得很实际!在Windows 10里要捕获或检测其他进程弹出的Toast通知,有几种官方和实用的方案,我来给你逐一说明:
一、使用官方的Toast Notification Listener API(推荐)
这是微软专门提供的用于监听系统Toast通知的API,支持获取通知的内容、来源应用ID、触发时间等关键信息,非常适合开发者集成到自己的应用中。
实现步骤:
- 首先,你的应用需要声明
notificationListener功能(在Package.appxmanifest里添加对应的能力声明) - 实例化
ToastNotificationListener对象,请求用户授权(因为监听通知需要用户同意) - 订阅
NotificationReceived事件,当有新Toast弹出时,该事件会被触发,你可以在事件处理函数中获取通知的详细信息
简单示例代码(C#):
using Windows.UI.Notifications.Management; using Windows.UI.Notifications; // 初始化监听器 var listener = ToastNotificationListener.Current; // 请求用户授权 var status = await listener.RequestAccessAsync(); if (status == NotificationListenerAccessStatus.Allowed) { // 订阅通知接收事件 listener.NotificationReceived += Listener_NotificationReceived; } // 事件处理函数 private void Listener_NotificationReceived(ToastNotificationListener sender, NotificationReceivedEventArgs args) { // 获取来源应用ID string appId = args.AppId; // 获取Toast的内容(可以解析XML结构) ToastNotification toast = args.Notification as ToastNotification; string toastContent = toast.Content.GetXml(); // 这里可以根据需求处理捕获到的通知,比如记录日志、展示到自己的界面等 Console.WriteLine($"来自{appId}的Toast通知:{toastContent}"); }
二、通过UI自动化(UIAutomation)捕获
如果不想用UWP的API,或者需要用传统桌面应用实现,UI自动化是另一种可行方案。它通过遍历系统的UI元素,识别Toast通知窗口并提取内容。
核心思路:
- 使用UIAutomationClient库,监听桌面的UI元素变化
- 识别Toast窗口的特征(比如窗口类名通常是
Windows.UI.Core.CoreWindow,或者包含Toast相关的属性) - 找到Toast窗口后,提取其中的文本内容和来源信息
注意事项:
- 这种方法需要处理UI元素的动态变化,稳定性可能不如官方API
- 需要注意权限问题,部分场景下可能需要管理员权限才能访问所有UI元素
三、关于检测其他应用的Toast通知
上面两种方法都能直接实现检测:
- 用Toast Notification Listener API时,
NotificationReceivedEventArgs里的AppId就是发送Toast的应用ID,通过这个可以精准定位到是哪个应用弹出的通知 - 用UI自动化的话,可以通过Toast窗口的属性(比如关联的进程ID)反向查找对应的应用
额外提示:
- 如果你只是临时需要捕获通知,也可以用一些第三方工具(比如Toastify、Notification Logger),但如果是开发需求,还是推荐用官方API更可靠
- 注意用户隐私,任何监听通知的行为都需要明确告知用户并获得授权,符合Windows的隐私政策
内容的提问来源于stack exchange,提问作者v.chjen
相关产品推荐
相关产品推荐

