Partilhar via


Como habilitar notificações de pop-up na área de trabalho por meio de um AppUserModelID

Este tópico mostra como criar um atalho para seu aplicativo, atribuir-lhe um AppUserModelIDe instalá-lo na tela inicial. É altamente recomendável que você faça isso no Windows Installer em vez de no código do seu aplicativo. Sem um atalho válido instalado no ecrã inicial ou no Todos os Programas, não é possível gerar uma notificação de aviso a partir de um aplicativo da área de trabalho.

Observação

Os métodos de exemplo usados neste tópico são retirados da amostra de notificação de desktop do Desktop.

 

O que precisa de saber

Tecnologias

  • COM

Pré-requisitos

  • Bibliotecas
    • C++: Runtime.object.lib
    • C#: Windows.Winmd
  • C#: Pacote de código da API do Windows para Microsoft .NET Framework
  • Uma versão do Microsoft Visual Studio que suporta pelo menos o Windows 8

Instruções

Etapa 1: Preparar o atalho a ser criado

Este exemplo primeiro determina o caminho da pasta de dados do aplicativo do usuário por meio da funçãoGetEnvironmentVariable. Em seguida, ele compõe o caminho completo para o atalho, determina que um atalho desse nome ainda não existe naquele local e passa essa informação para outro método que cria e instala o atalho.

Observe que o atalho pode ser implantado por usuário ou por aplicativo.

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

Etapa 2: Crie o atalho e instale-o na tela inicial

Este exemplo também recupera o armazenamento de propriedades do atalho e define a propriedade System.AppUserModel.ID necessária de uma variável definida anteriormente, 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;
}

Comentários

Como alternativa à abordagem mostrada neste tópico, você pode usar uma estrutura como o Windows Installer XML (WiX) para gerar o atalho e implantá-lo como parte do Windows Installer. Nesse caso, esse código deve ser incluído no MSI em vez de no código do aplicativo. Para obter mais informações, consulte o ficheiro de configuração WiX de exemplo incluído com o exemplo Enviando notificações do sistema de aplicativos da área de trabalho.

Guia de início rápido: enviar uma notificação de aviso no ambiente de trabalho

Exemplo de envio de notificações toast de aplicações de ambiente de trabalho

IDs de modelo de usuário de aplicativo (AppUserModelIDs)

Como: Instalar as Ferramentas WiX (Windows Installer XML)

Esquema XML Toast

Visão geral da notificação Toast

Início Rápido: Enviando uma Notificação de Balão

Início rápido: enviando uma notificação por push tipo toast

Diretrizes e lista de verificação para notificações do sistema

Como adicionar imagens a um modelo de notificação

Como verificar as configurações de notificação tipo 'toast'

Como escolher e usar um modelo de toast

Como lidar com a ativação de uma notificação de toast

Como optar por notificações do sistema

Escolhendo um modelo de aviso

Opções de áudio de notificação