次の方法で共有


他の種類のパッケージ化されていないアプリからローカル トースト通知を送信する

このトピックは、C# または C++ 以外のパッケージ化されていないアプリを開発する場合に適しています。

つまり、パッケージ アプリを開発 していない 場合 (パッケージ化された WinUI 3 デスクトップ アプリの新しいプロジェクトを作成するを参照)、外部の場所でパッケージ 化されたアプリを開発していない場合 (「 外部の場所でパッケージ化してパッケージ ID を付与する」を参照)、アプリが C# または C++ ではありません。

トースト通知は、ユーザーが現在アプリを使用していないときに、アプリが構築してユーザーに配信できるメッセージです。 このクイック スタートでは、Windows トースト通知を作成、配信、表示する手順について説明します。 これらのクイック スタートでは、実装する最も簡単な通知であるローカル通知を使用します。

Von Bedeutung

C# アプリを作成する場合は、 C# のドキュメントを参照してください。 C++ アプリを作成する場合は、 C++ UWP または C++ WRL のドキュメントを参照してください。

手順 1: レジストリにアプリを登録する

まず、アプリを識別する一意の AUMID、アプリの表示名、アイコン、COM アクティベーターの GUID など、アプリの情報をレジストリに登録する必要があります。

<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>

手順 2: COM アクティベーターを設定する

通知は、アプリが実行されていない場合でも、いつでもクリックできます。 したがって、通知のアクティブ化は COM アクティベーターを介して処理されます。 COM クラスは、 INotificationActivationCallback インターフェイスを実装する必要があります。 COM クラスの GUID は、レジストリ CustomActivator 値で指定した GUID と一致する必要があります。

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

手順 3: トーストを送信する

Windows 10 では、トースト通知コンテンツはアダプティブ言語を使用して記述され、通知の表示方法を柔軟に設定できます。 詳細については、トーストの内容に関するドキュメント を参照してください。

まず、単純なテキストベースの通知から始めます。 (Notifications ライブラリを使用して) 通知コンテンツを構築し、通知を表示します。

Von Bedeutung

通知を送信するときに、アプリから通知が表示されるように、以前の AUMID を使用する必要があります。

単純なテキスト通知
// 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);

手順 4: アクティブ化の処理

通知がクリックされると、COM アクティベーターがアクティブになります。

詳細

AUMID の制限

AUMID の長さは最大 129 文字です。 AUMID の長さが 129 文字を超える場合、スケジュールされたトースト通知は機能しません。スケジュールされた通知を追加すると、次の例外が発生します。 システム呼び出しに渡されるデータ領域が小さすぎます。(0x8007007A)