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