Enviar uma notificação do sistema local de outros tipos de aplicativos não empacotados
Este tópico é para você se estiver desenvolvendo um aplicativo não empacotado que não seja C# ou C++.
Ou seja, se você não estiver desenvolvendo um aplicativo empacotado (consulte Criar um novo projeto para um aplicativo da área de trabalho WinUI 3 empacotado) e não estiver desenvolvendo um aplicativo empacotado com local externo (consulte Conceder identidade de pacote empacotando com local externo) e seu aplicativo não for C# ou C++.
Uma notificação do sistema é uma mensagem que um aplicativo pode construir e entregar ao usuário enquanto o usuário não está usando seu aplicativo no momento. Este guia de início rápido orienta você pelas etapas para criar, entregar e exibir uma notificação do sistema do Windows. Esses guias de início rápido usam notificações locais, que são as notificações mais simples de implementar.
Importante
Se você estiver escrevendo um aplicativo C#, consulte a documentação do C#. Se você estiver escrevendo um aplicativo C++, consulte a documentação UWP do C++ ou WRL do C++.
Etapa 1: registrar seu aplicativo no registro
Primeiro, você precisa registrar as informações do aplicativo no registro, incluindo uma AUMID exclusiva que identifica seu aplicativo, o nome de exibição do aplicativo, o ícone e o GUID de um ativador 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>
Etapa 2: configurar o ativador COM
As notificações podem ser clicadas a qualquer momento, mesmo quando o aplicativo não estiver em execução. Assim, a ativação de notificação é tratada por meio de um ativador COM. Sua classe COM deve implementar a INotificationActivationCallback
interface. O GUID da classe COM deve corresponder ao GUID especificado no valor CustomActivator do 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();
}
}
};
Etapa 3: Enviar uma notificação do sistema
No Windows 10, o conteúdo da notificação do sistema é descrito usando uma linguagem adaptável que permite grande flexibilidade com a aparência da notificação. Consulte a documentação do conteúdo da notificação do sistema para obter mais informações.
Começaremos com uma notificação simples baseada em texto. Construa o conteúdo da notificação (usando a biblioteca de notificações) e mostre a notificação!
Importante
Você deve usar sua AUMID anterior ao enviar a notificação para que a notificação apareça em seu aplicativo.
// 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);
Etapa 4: Manipulando a ativação
Seu ativador COM será ativado quando sua notificação for clicada.
Mais detalhes
Restrições AUMID
O AUMID deve ter no máximo 129 caracteres. Se a AUMID tiver mais de 129 caracteres, as notificações do sistema agendadas não funcionarão – você obterá a seguinte exceção ao adicionar uma notificação agendada: A área de dados passada para uma chamada do sistema é muito pequena. (0x8007007A).
Windows developer