Search code examples
pythonnotificationswindows-10

How can I listen to Windows 10 notifications in Python?


My Python test script causes our product to raise Windows notifications ("Toasts"). How can my python script verify that the notifications are indeed raised?

I see it's possible to make a notification listener in C# using Windows.UI.Notifications.Management.UserNotificationListener (ref), And I see I can make my own notifications in Python using win10toast - but how do I listen to othe apps' notifications?


Solution

  • You can use pywinrt to access the bindings in python. A basic example would look something like this:

    from winrt.windows.ui.notifications.management import UserNotificationListener, UserNotificationListenerAccessStatus
    from winrt.windows.ui.notifications import NotificationKinds, KnownNotificationBindings
    
    if not ApiInformation.is_type_present("Windows.UI.Notifications.Management.UserNotificationListener"):
        print("UserNotificationListener is not supported on this device.")
        exit()
    
    listener = UserNotificationListener.get_current()
    accessStatus = await listener.request_access_async()
    
    if accessStatus != UserNotificationListenerAccessStatus.ALLOWED:
        print("Access to UserNotificationListener is not allowed.")
        exit()
    
    def handler(listener, event):
        notification = listener.get_notification(event.user_notification_id)
    
        # get some app info if available
        if hasattr(notification, "app_info"):
            print("App Name: ", notification.app_info.display_info.display_name)
    
    listener.add_notification_changed(handler)