Partage 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 ne développez pas d’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 Grant package identity by packaging with external location) et votre application n’est pas C# ou C++.

Une notification toast est un message indiquant qu’une application peut construire et remettre à l’utilisateur alors que l’utilisateur n’utilise pas actuellement votre application. Ce guide de démarrage rapide vous guide tout au long des étapes de création, de remise et d’affichage d’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++, consultez 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 de contenu toast.

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 précédemment lors de l’envoi de la notification afin que la notification s’affiche à partir de 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.

En savoir plus

Restrictions AUMID

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