Compartilhar via


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.

Notificação de texto simples
// 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).