このトピックは、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)。
Windows developer