次の方法で共有


AppUserModelID を使用して、デスクトップ トースト通知を有効にする方法

このトピックでは、アプリのショートカットを作成し、 AppUserModelID を割り当てて、[スタート] 画面にインストールする方法について説明します。 アプリのコードではなく、Windows インストーラーでこれを行うことを強くお勧めします。 [スタート] 画面または [すべてのプログラム] に有効なショートカットがインストールされていない場合、デスクトップ アプリからトースト通知を生成することはできません。

Note

このトピックで使用するメソッドの例は、 デスクトップ トースト サンプルから取得したものです。

 

知っておくべきこと

テクノロジ

  • COM (COM)

前提条件

  • ライブラリ
    • C++: Runtime.object.lib
    • C#: Windows.Winmd
  • C#: Windows API Code Pack for Microsoft .NET Framework
  • 少なくとも Windows 8 をサポートする Microsoft Visual Studio のバージョン

Instructions

手順 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 インストーラー XML (WiX) などのフレームワークを使用してショートカットを生成し、Windows インストーラーの一部として展開できます。 その場合、このコードは、アプリのコードではなく MSI に含める必要があります。 詳細については、「 デスクトップ アプリからのトースト通知の送信 」サンプルに含まれているサンプル WiX 構成ファイルを参照してください。

クイック スタート: デスクトップからトースト通知を送信する

デスクトップ アプリからのトースト通知の送信サンプル

アプリケーション ユーザー モデル ID (AppUserModelID)

方法: Windows インストーラー XML (WiX) ツールをインストールする

トースト XML スキーマ

トースト通知の概要

クイック スタート: トースト通知の送信

クイック スタート: トースト プッシュ通知の送信

トースト通知のガイドラインとチェックリスト

トースト テンプレートに画像を追加する方法

トースト通知設定をチェックする方法

トースト テンプレートを選択して使用する方法

トースト通知からのアクティブ化を処理する方法

トースト通知をオプトインする方法

トースト テンプレートの選択

トースト オーディオ オプション