怎么可以获取电脑右下角通知里面的通知信息呢?

随便聊聊 · 609 次浏览
cqk26 创建于 3小时52分钟前

怎么可以获取电脑右下角通知里面的通知信息呢?

想要根据通知信息来判断执行某个动作


回复内容
CL 1小时29分钟前
#1

quicker里没有这方面的功能。

参考AI的回复。

可以。Windows 10/11 官方提供了 UserNotificationListener,能够读取通知中心里的通知,包括其他应用发出的通知。

基本流程是:

  1. 应用声明 userNotificationListener 能力。
  2. 在 UI 线程请求用户授权。
  3. 调用 GetNotificationsAsync() 读取当前通知。
  4. 监听 NotificationChanged 获取新增或移除事件。

C# 核心代码大致如下:

using Windows.UI.Notifications;
using Windows.UI.Notifications.Management;

var listener = UserNotificationListener.Current;

// 必须在 UI 线程调用,会弹出系统授权界面
var status = await listener.RequestAccessAsync();

if (status != UserNotificationListenerAccessStatus.Allowed)
{
    return;
}

// 读取当前通知中心中仍然存在的 Toast 通知
var notifications =
    await listener.GetNotificationsAsync(NotificationKinds.Toast);

foreach (var notification in notifications)
{
    string appName =
        notification.AppInfo?.DisplayInfo?.DisplayName ?? "";

    DateTimeOffset createdAt = notification.CreationTime;

    var binding = notification.Notification.Visual
        .GetBinding(KnownNotificationBindings.ToastGeneric);

    string[] texts = binding?
        .GetTextElements()
        .Select(x => x.Text)
        .ToArray() ?? [];

    Console.WriteLine($"应用:{appName}");
    Console.WriteLine($"时间:{createdAt}");
    Console.WriteLine($"内容:{string.Join(" | ", texts)}");
}

监听变化:

listener.NotificationChanged += async (_, args) =>
{
    // 回调可能不在 UI 线程
    var current = await listener.GetNotificationsAsync(
        NotificationKinds.Toast);

    // 建议按 notification.Id 建立快照,
    // 对比前后集合判断新增和删除
};

应用清单需要声明:

<Package
    xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
    IgnorableNamespaces="uap3">

    <Capabilities>
        <uap3:Capability Name="userNotificationListener" />
    </Capabilities>
</Package>

几个重要限制:

  • 这不是普通 Win32 API,应用通常需要具备包身份,并在包清单中声明能力;传统未打包的 EXE 不能简单地直接调用。
  • 必须由用户明确授权,无法静默绕过。
  • 只能读取通知中心当前保留的通知,不是完整的历史通知数据库。
  • 通知被系统或用户清除后,通常不能再读取;需要监听并自行保存。
  • 有些通知只有标题和正文,有些还会带图片、按钮或进度信息,需要继续解析通知的 XML/Binding。
  • 仓库中的 ToastNotifications 是 Quicker 自己显示弹窗的 WPF 库,与读取 Windows 通知中心不是同一个机制。

微软官方文档:Notification listenerUserNotificationListener清单能力声明

如果目标是让 Quicker 获取这些通知,技术上可行,但首先要核实 Quicker 当前安装包是否具备合适的包身份和清单能力;否则可能需要增加一个打包的通知代理进程,再把通知转交给 Quicker。

回复主贴