Aktivieren von Desktoppopupbenachrichtigungen über eine AppUserModelID
In diesem Thema erfahren Sie, wie Sie eine Verknüpfung für Ihre App erstellen, ihr eine AppUserModelID zuweisen und sie auf dem Startbildschirm installieren. Es wird dringend empfohlen, dies im Windows Installer und nicht im Code Ihrer App zu tun. Ohne eine gültige Verknüpfung auf dem Startbildschirm oder unter Alle Programme können Sie keine Popupbenachrichtigung von einer Desktop-App auslösen.
Hinweis
Die in diesem Thema verwendeten Beispielmethoden stammen aus dem Desktop-Popupbeispiel.
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
Anweisungen
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, bestimmt, dass an diesem Speicherort noch keine Verknüpfung mit diesem Namen vorhanden ist, und diese Informationen an eine andere Methode übergeben, 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 der Verknüpfung und Installation auf dem Startbildschirm
In diesem Beispiel wird auch der Eigenschaftenspeicher der Verknüpfung abgerufen und die erforderliche System.AppUserModel.ID-Eigenschaft aus einer zuvor definierten Variablen festgelegt. AppID
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
Alternativ zum in diesem Thema gezeigten Ansatz können Sie ein Framework wie windows Installer XML (WiX) verwenden, um die Verknüpfung zu generieren und als Teil des Windows Installer bereitzustellen. In diesem Fall sollte dieser Code in der MSI und nicht im Code der App enthalten sein. Weitere Informationen finden Sie in der Beispiel-WiX-Konfigurationsdatei, die im Beispiel Senden von Popupbenachrichtigungen von Desktop-Apps enthalten ist.
Zugehörige Themen
-
Schnellstart: Senden einer Popupbenachrichtigung vom Desktop
-
Beispiel zum Senden von Toastbenachrichtigungen aus Desktop-Apps
-
Vorgehensweise: Installieren der Windows Installer-XML-Tools (WiX)