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 構成ファイルを参照してください。
関連トピック