Condividi tramite


Come abilitare le notifiche di tipo avviso popup sul desktop tramite un AppUserModelID

Questo argomento illustra come creare un collegamento per l'app, assegnargli un AppUserModelID e installarlo nella schermata Start. È consigliabile eseguire questa operazione in Windows Installer anziché nel codice dell'app. Senza un collegamento valido installato nella schermata Start o in Tutti i programmi, non è possibile generare una notifica di tipo avviso popup da un'app desktop.

Nota

I metodi di esempio usati in questo argomento sono tratti dall'esempio di avviso popup desktop.

 

Informazioni importanti

Tecnologie

  • COM

Prerequisiti

  • Librerie
    • C++: Runtime.object.lib
    • C#: Windows.Winmd
  • C#: Pacchetto di codice dell'API Windows per Microsoft .NET Framework
  • Versione di Microsoft Visual Studio che supporta almeno Windows 8

Istruzioni

Passaggio 1: Preparare il collegamento da creare

Questo esempio determina innanzitutto il percorso della cartella dei dati dell'app dell'utente tramite la funzione GetEnvironmentVariable . Quindi compone il percorso completo del collegamento, determina che un collegamento di tale nome non esiste già in tale posizione e passa tali informazioni a un altro metodo che crea e installa il collegamento.

Si noti che il collegamento può essere distribuito per utente o per app.

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;
}

Passaggio 2: Creare il collegamento e installarlo nella schermata Start

Questo esempio recupera anche l'archivio delle proprietà del collegamento e imposta la proprietà System.AppUserModel.ID richiesta da una variabile definita in precedenza, 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;
}

Commenti

In alternativa all'approccio illustrato in questo argomento, è possibile usare un framework come Windows Installer XML (WiX) per generare il collegamento e distribuirlo come parte di Windows Installer. In tal caso, questo codice deve essere incluso nell'identità del servizio gestito anziché nel codice dell'app. Per altre informazioni, vedere il file di configurazione WiX di esempio incluso nell'esempio Invio di notifiche di tipo avviso popup dalle app desktop .

Guida introduttiva: Invio di una notifica di tipo avviso popup dal desktop

Esempio di invio notifiche di tipo avviso popup da app desktop

ID modello utente applicazione (AppUserModelIDs)

Procedura: Installare gli strumenti XML di Windows Installer (WiX)

XML Schema di tipo avviso popup

Panoramica delle notifiche di tipo avviso popup

Guida introduttiva: Invio di una notifica di tipo avviso popup

Guida introduttiva: Invio di una notifica push di tipo avviso popup

Linee guida ed elenco di controllo per le notifiche di tipo avviso popup

Come aggiungere immagini a un modello di avviso popup

Come controllare le impostazioni delle notifiche di tipo avviso popup

Come scegliere e usare un modello di avviso popup

Come gestire l'attivazione da una notifica di tipo avviso popup

Come acconsentire esplicitamente alle notifiche di tipo avviso popup

Scelta di un modello di avviso popup

Opzioni audio di tipo avviso popup