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.
// 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).