Aktivieren von Desktoppopupbenachrichtigungen über eine AppUserModelID
In diesem Thema erfahren Sie, wie Sie eine Verknüpfung für Ihre App erstellen, ihr eine AppUserModelIDzuweisen und sie im Startbildschirm. Es wird dringend empfohlen, dies im Windows Installer und nicht im Code Ihrer App zu tun. Ohne eine gültige Verknüpfung, die im Startbildschirm oder unter Alle Programme installiert ist, können Sie keine Popupbenachrichtigung von einer Desktop-App aus erstellen.
Hinweis
Die in diesem Thema verwendeten Beispielmethoden sind aus dem Desktop-Popupbeispiel entnommen.
Wichtige Informationen
Technologien
- COM
Voraussetzungen
- Bibliotheken
- C++: Runtime.object.lib
- C # : Windows. Winmd
- C # : Windows API Code Pack für Microsoft .NET Framework
- Eine Version von Microsoft Visual Studio, die mindestens Windows 8
Instructions
Schritt 1: Vorbereiten der zu erstellenden Verknüpfung
In diesem Beispiel wird zunächst der Pfad des App-Datenordners des Benutzers über die GetEnvironmentVariable-Funktion bestimmt. Anschließend wird der vollständige Pfad zur Verknüpfung erstellt, ermittelt, dass an diesem Speicherort noch keine Verknüpfung mit diesem Namen vorhanden ist, und übergibt diese Informationen an eine andere Methode, die die Verknüpfung erstellt und installiert.
Beachten Sie, dass die Verknüpfung pro Benutzer oder pro App bereitgestellt werden kann.
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;
}
Schritt 2: Erstellen Sie die Verknüpfung, und installieren Sie sie im Startbildschirm
In diesem Beispiel wird auch der Eigenschaftenspeicher der Verknüpfung abgerufen und die erforderliche System.AppUserModel.ID-Eigenschaft aus einer zuvor definierten Variablen AppID festgelegt.
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;
}
Bemerkungen
Als Alternative zum in diesem Thema gezeigten Ansatz können Sie ein Framework wie das Windows Installer XML (WiX) verwenden, um die Verknüpfung zu generieren und als Teil des Windows Installers bereitzustellen. In diesem Fall sollte dieser Code in der MSI und nicht im Code der App enthalten sein. Weitere Informationen finden Sie in der WiX-Beispielkonfigurationsdatei, die im Beispiel Senden von Popupbenachrichtigungen von Desktop-Apps enthalten ist.