Compartir a través de


Envío de una notificación del sistema local desde otros tipos de aplicaciones desempaquetadas

Este tema es para usted si está desarrollando una aplicación sin empaquetar que no sea C# o C++.

Es decir, si no estás desarrollando una aplicación empaquetada (consulta Crear un nuevo proyecto para una aplicación de escritorio de WinUI 3 empaquetada) y no estás desarrollando una aplicación empaquetada con ubicación externa (consulta Conceder identidad de paquete mediante empaquetado con ubicación externa) y la aplicación no es C# ni C++.

Una notificación del sistema es un mensaje que indica que una aplicación puede construir y entregar al usuario mientras el usuario no usa actualmente la aplicación. Este inicio rápido le guía por los pasos para crear, entregar y mostrar una notificación del sistema de Windows. En esta guía de inicio rápido se usan las notificaciones locales, que son las más sencillas de implementar.

Importante

Si va a escribir una aplicación de C#, consulte la documentación de C#. Si estás escribiendo una aplicación de C++, consulta la documentación de C++ para UWP o C++ WRL .

Paso 1: Registrar la aplicación en el Registro

En primer lugar, debes registrar la información de la aplicación en el Registro, incluido un AUMID único que identifique la aplicación, el nombre para mostrar de la aplicación, el icono y el GUID de un activador 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>

Paso 2: Configurar el activador COM

Las notificaciones se pueden hacer clic en cualquier momento dado, incluso cuando la aplicación no se está ejecutando. Por lo tanto, la activación de notificaciones se controla a través de un activador COM. La clase COM debe implementar la INotificationActivationCallback interfaz . El GUID de la clase COM debe coincidir con el GUID especificado en el valor customActivator del registro.

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();
        }
    }
};

Paso 3: Enviar una notificación del sistema

En Windows 10, el contenido de la notificación del sistema se describe mediante un lenguaje adaptable que permite una gran flexibilidad con el aspecto de la notificación. Consulte la documentación del contenido del sistema para obtener más información.

Comenzaremos con una notificación sencilla basada en texto. Construya el contenido de la notificación (mediante la biblioteca de notificaciones) y muestre la notificación.

Importante

Debes usar tu AUMID desde antes al enviar la notificación para que aparezca la notificación desde la aplicación.

Notificación de texto 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);

Paso 4: Control de la activación

El activador COM se activará cuando se haga clic en la notificación.

Más detalles

Restricciones de AUMID

El AUMID debe tener como máximo 129 caracteres. Si el AUMID tiene más de 129 caracteres, las notificaciones del sistema programadas no funcionarán; obtendrá la siguiente excepción al agregar una notificación programada: el área de datos que se pasa a una llamada del sistema es demasiado pequeña. (0x8007007A).