Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico mostra como criar um atalho para seu aplicativo, atribuir a ele 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 toast de um aplicativo da área de trabalho.
Observação
Os métodos de exemplo usados neste tópico são obtidos do Amostra de notificações da á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 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çã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 AppIDdefinida anteriormente.
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;
}
Observações
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 de 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: Envio de uma notificação do sistema usando a área de trabalho
-
Exemplo de envio de notificações de aplicativos da área de trabalho
-
Identificadores do modelo de usuário de aplicativo (AppUserModelIDs)
-
Diretrizes e lista de verificação para notificações do sistema