共用方式為


如何透過 AppUserModelID 啟用桌面快顯通知

本主題說明如何建立應用程式的快捷方式、將 AppUserModelID 指派給 AppUserModelID,並在 [開始] 畫面中加以安裝。 強烈建議您在 Windows Installer 中執行此動作,而不是在應用程式的程式碼中執行此動作。 若未在 \[開始\] 畫面或 \[所有程式\] 中安裝有效的快捷方式,您無法從傳統型應用程式引發快顯通知。

注意

本主題中使用的範例方法取自 桌面快顯通知範例

 

您所需了解的事情

技術

  • COM

必要條件

  • 程式庫
    • C++:Runtime.object.lib
    • C#:Windows.Winmd
  • C#:適用于 Microsoft .NET Framework 的 Windows API 程式碼套件
  • 至少支援 Windows 8 的 Microsoft Visual Studio 版本

指示

步驟 1:準備要建立的快捷方式

此範例會先透過 GetEnvironmentVariable 函式判斷使用者應用程式資料檔案夾的路徑。 然後,它會撰寫快捷方式的完整路徑、判斷該名稱的快捷方式不存在於該位置,並將該資訊傳遞給另一個建立並安裝快捷方式的方法。

請注意,快捷方式可以部署每個使用者或個別應用程式。

HRESULT DesktopToastsApp::TryCreateShortcut()
{
    wchar_t shortcutPath[MAX_PATH];
    DWORD charWritten = GetEnvironmentVariable(L"APPDATA", shortcutPath, MAX_PATH);
    HRESULT hr = charWritten > 0 ? S_OK : E_INVALIDARG;

    if (SUCCEEDED(hr))
    {
        errno_t concatError = wcscat_s(shortcutPath, ARRAYSIZE(shortcutPath), L"\\Microsoft\\Windows\\Start Menu\\Programs\\Desktop Toasts App.lnk");
 
        hr = concatError == 0 ? S_OK : E_INVALIDARG;
        if (SUCCEEDED(hr))
        {
            DWORD attributes = GetFileAttributes(shortcutPath);
            bool fileExists = attributes < 0xFFFFFFF;

            if (!fileExists)
            {
                hr = InstallShortcut(shortcutPath);  // See step 2.
            }
            else
            {
                hr = S_FALSE;
            }
        }
    }
    return hr;
}

步驟 2:建立快捷方式並在 [開始] 畫面中安裝

這個範例也會擷取快捷方式的屬性存放區,並從先前定義的變數 AppID 設定必要的System.AppUserModel.ID屬性。

HRESULT DesktopToastsApp::InstallShortcut(_In_z_ wchar_t *shortcutPath)
{
    wchar_t exePath[MAX_PATH];
    
    DWORD charWritten = GetModuleFileNameEx(GetCurrentProcess(), nullptr, exePath, ARRAYSIZE(exePath));

    HRESULT hr = charWritten > 0 ? S_OK : E_FAIL;
    
    if (SUCCEEDED(hr))
    {
        ComPtr<IShellLink> shellLink;
        hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink));

        if (SUCCEEDED(hr))
        {
            hr = shellLink->SetPath(exePath);
            if (SUCCEEDED(hr))
            {
                hr = shellLink->SetArguments(L"");
                if (SUCCEEDED(hr))
                {
                    ComPtr<IPropertyStore> propertyStore;

                    hr = shellLink.As(&propertyStore);
                    if (SUCCEEDED(hr))
                    {
                        PROPVARIANT appIdPropVar;
                        hr = InitPropVariantFromString(AppId, &appIdPropVar);
                        if (SUCCEEDED(hr))
                        {
                            hr = propertyStore->SetValue(PKEY_AppUserModel_ID, appIdPropVar);
                            if (SUCCEEDED(hr))
                            {
                                hr = propertyStore->Commit();
                                if (SUCCEEDED(hr))
                                {
                                    ComPtr<IPersistFile> persistFile;
                                    hr = shellLink.As(&persistFile);
                                    if (SUCCEEDED(hr))
                                    {
                                        hr = persistFile->Save(shortcutPath, TRUE);
                                    }
                                }
                            }
                            PropVariantClear(&appIdPropVar);
                        }
                    }
                }
            }
        }
    }
    return hr;
}

備註

除了本主題所示的方法,您也可以使用 Windows Installer XML (WiX) 之類的架構來產生快捷方式,並將其部署為 Windows Installer 的一部分。 在此情況下,此程式碼應該包含在 MSI 中,而不是包含在應用程式的程式碼中。 如需詳細資訊,請參閱 從傳統型應用程式傳送快顯通知 範例隨附的 WiX 組態檔範例。

快速入門:從桌面傳送快顯通知

從桌面應用程式範例傳送快顯通知

應用程式使用者模型識別碼 (AppUserModelIDs)

如何:安裝 Windows Installer XML (WiX) 工具

快顯通知 XML 架構

快顯通知概觀

快速入門:傳送快顯通知

快速入門:傳送快顯通知推播通知

快顯通知的指導方針和檢查清單

如何將影像新增至快顯通知範本

如何檢查快顯通知設定

如何選擇和使用快顯通知範本

如何處理快顯通知的啟用

如何加入宣告快顯通知

選擇快顯通知範本

快顯通知音訊選項