共用方式為


從其他類型的未封裝應用程式傳送本機快顯通知

如果您要開發的不是 C# 或 C++ 的未封裝應用程式,則本主題適合您。

也就是說,如果您不是開發封裝應用程式 (請參閱為已封裝的 WinUI 3 桌面應用程式建立新專案),也不是開發具有外部位置的封裝應用程式 (請參閱使用外部位置進行封裝以授與封裝身分識別),而且您的應用程式不是 C# 或 C++。

快顯通知是一則訊息,應用程式可以自行建構,並且在使用者目前未使用您的應用程式時,將通知傳遞給使用者。 本快速入門將逐步引導您完成建立、傳遞及顯示 Windows 快顯通知的步驟。 此快速入門使用本機通知,這是實作起來最簡單的通知。

重要

如果您要編寫 C# 應用程式,則請參閱 C# 文件。 如果您要編寫 C++ 應用程式,請參閱 C++ UWPC++ 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 中,您的快顯通知內容是使用彈性語言來描述,讓您在通知的外觀上擁有很大的彈性。 如需詳細資訊,請參閱快顯內容文件

我們將從簡單的文字通知開始。 建構通知內容 (使用通知程式庫),並顯示通知!

重要

傳送通知時,您必須使用先前的 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)