從其他類型的未封裝應用程式傳送本機快顯通知
如果您要開發的不是 C# 或 C++ 的未封裝應用程式,則本主題適合您。
也就是說,如果您不是開發封裝應用程式 (請參閱為已封裝的 WinUI 3 桌面應用程式建立新專案),也不是開發具有外部位置的封裝應用程式 (請參閱使用外部位置進行封裝以授與封裝身分識別),而且您的應用程式不是 C# 或 C++。
快顯通知是一則訊息,應用程式可以自行建構,並且在使用者目前未使用您的應用程式時,將通知傳遞給使用者。 本快速入門將逐步引導您完成建立、傳遞及顯示 Windows 快顯通知的步驟。 此快速入門使用本機通知,這是實作起來最簡單的通知。
步驟 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 中,您的快顯通知內容是使用彈性語言來描述,讓您在通知的外觀上擁有很大的彈性。 如需詳細資訊,請參閱快顯內容文件。
我們將從簡單的文字通知開始。 建構通知內容 (使用通知程式庫),並顯示通知!
重要
傳送通知時,您必須使用先前的 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)。