Compartilhar via


Como habilitar notificações do sistema de área de trabalho por meio de um AppUserModelID

Este tópico mostra como criar um atalho para seu aplicativo, atribuí-lo a um AppUserModelID e 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 na tela Inicial ou em Todos os Programas, você não pode gerar uma notificação do sistema de um aplicativo da área de trabalho.

Observação

Os métodos de exemplo usados neste tópico são obtidos do exemplo do sistema de área de trabalho.

 

O que você precisa saber

Tecnologias

  • COM

Pré-requisitos

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

Instruções

Etapa 1: Preparar o atalho a ser criado

Este exemplo determina primeiro o caminho da pasta de dados do aplicativo do usuário por meio da função GetEnvironmentVariable . Em seguida, ele compõe o caminho completo para o atalho, determina que um atalho desse nome ainda não existe nesse local e passa essas informações 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: Criar o atalho e instalá-lo na tela Inicial

Este exemplo também recupera o repositório 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 e não no código do aplicativo. Para obter mais informações, consulte o arquivo de configuração wix de exemplo incluído no exemplo Enviar notificações do sistema de aplicativos da área de trabalho .

Início Rápido: Enviar uma notificação do sistema da área de trabalho

Exemplo de envio de notificações do sistema de aplicativos da área de trabalho

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

Como instalar as ferramentas do Windows Installer XML (WiX)

Esquema XML do Sistema

Visão geral da notificação do sistema

Início Rápido: Enviar uma notificação do sistema

Início Rápido: Enviar uma notificação por push do sistema

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

Como adicionar imagens a um modelo de notificação do sistema

Como marcar configurações de notificação do sistema

Como escolher e usar um modelo de notificação do sistema

Como lidar com a ativação de uma notificação do sistema

Como aceitar notificações do sistema

Escolhendo um modelo de notificação do sistema

Opções de áudio do sistema