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.
Tópicos relacionados
-
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
-
Diretrizes e lista de verificação para notificações do sistema