Partager via


Envoyer une notification toast locale à partir d’autres types d’applications non empaquetées

Cette rubrique est destinée à vous si vous développez une application non empaquetée qui n’est pas C# ou C++.

Autrement dit, si vous n’êtes pas développement d’une application empaquetée (voir Créer un projet pour une application de bureau WinUI 3 empaquetée), et que vous ne développez pas d’application empaquetée avec un emplacement externe (voir Accorder une identité de package en empaquetant avec un emplacement externe), et votre application n’est pas C# ou C++.

Une notification toast est un message qu'une application peut créer et remettre à un utilisateur alors qu'il n'est pas en train d'utiliser son application. Ce guide de démarrage rapide vous accompagne à travers les étapes pour créer, envoyer et afficher une notification toast Windows. Ce guide de démarrage rapide utilise des notifications locales, qui sont la notification la plus simple à implémenter.

Important

Si vous écrivez une application C#, consultez la documentation C#. Si vous écrivez une application C++, veuillez consulter la documentation C++ UWP ou C++ WRL.

Étape 1 : Inscrire votre application dans le Registre

Vous devez d’abord inscrire les informations de votre application dans le Registre, y compris un AUMID unique qui identifie votre application, le nom complet de votre application, votre icône et le GUID d’un activateur COM.

<registryKey keyName="HKEY_LOCAL_MACHINE\Software\Classes\AppUserModelId\<YOUR_AUMID>">
    <registryValue
        name="DisplayName"
        value="My App"
        valueType="REG_EXPAND_SZ" />
    <registryValue
        name="IconUri"
        value="C:\icon.png"
        valueType="REG_EXPAND_SZ" />
    <registryValue
        name="IconBackgroundColor"
        value="AARRGGBB"
        valueType="REG_SZ" />
    <registryValue
        name="CustomActivator"
        value="{YOUR COM ACTIVATOR GUID HERE}"
        valueType="REG_SZ" />
</registryKey>

Étape 2 : Configurer votre activateur COM

Les notifications peuvent être cliquées à tout moment, même lorsque votre application n’est pas en cours d’exécution. Ainsi, l’activation de notification est gérée par le biais d’un activateur COM. Votre classe COM doit implémenter l’interface INotificationActivationCallback . Le GUID de votre classe COM doit correspondre au GUID que vous avez spécifié dans la valeur CustomActivator du Registre.

struct callback : winrt::implements<callback, INotificationActivationCallback>
{
    HRESULT __stdcall Activate(
        LPCWSTR app,
        LPCWSTR args,
        [[maybe_unused]] NOTIFICATION_USER_INPUT_DATA const* data,
        [[maybe_unused]] ULONG count) noexcept final
    {
        try
        {
            std::wcout << this_app_name << L" has been called back from a notification." << std::endl;
            std::wcout << L"Value of the 'app' parameter is '" << app << L"'." << std::endl;
            std::wcout << L"Value of the 'args' parameter is '" << args << L"'." << std::endl;
            return S_OK;
        }
        catch (...)
        {
            return winrt::to_hresult();
        }
    }
};

Étape 3 : Envoyer un toast

Dans Windows 10, votre contenu de notification toast est décrit à l’aide d’un langage adaptatif qui permet une grande flexibilité avec l’apparence de votre notification. Pour plus d'informations, consultez la documentation du contenu toast (références et).

Nous allons commencer par une simple notification textuelle. Construisez le contenu de notification (à l’aide de la bibliothèque Notifications) et affichez la notification !

Important

Vous devez utiliser votre AUMID de tout à l'heure lors de l’envoi de la notification afin que celle-ci s’affiche depuis votre application.

notification texte simple
// Construct the toast template
XmlDocument doc;
doc.LoadXml(L"<toast>\
    <visual>\
        <binding template=\"ToastGeneric\">\
            <text></text>\
            <text></text>\
        </binding>\
    </visual>\
</toast>");

// Populate with text and values
doc.SelectSingleNode(L"//text[1]").InnerText(L"Andrew sent you a picture");
doc.SelectSingleNode(L"//text[2]").InnerText(L"Check this out, The Enchantments in Washington!");

// Construct the notification
ToastNotification notif{ doc };

// And send it! Use the AUMID you specified earlier.
ToastNotificationManager::CreateToastNotifier(L"MyPublisher.MyApp").Show(notif);

Étape 4 : Gestion de l’activation

Votre activateur COM est activé lorsque votre notification est cliquée.

Plus d’informations

Restrictions AUMID

L’AUMID doit comporter au maximum 129 caractères. Si l’AUMID comporte plus de 129 caractères, les notifications toast planifiées ne fonctionneront pas. Vous obtiendrez l’erreur suivante lors de l’ajout d’une notification planifiée : La zone de données transmise à un appel système est trop petite. (0x8007007A).